PDA

View Full Version : update یک جدول



azarbara
چهارشنبه 22 آبان 1392, 13:30 عصر
سلام دوستان عزیز
اولا بگم که من در SQL حرفه ای نیستم. چون اصلا رشته ام این نیست ولی باهاش کار می کنم. الان هم به یک راهنمایی نیاز دارم که امیدوارم مشکلم حل شه.
دوستان من یک Table دارم با فیلدهای مشخص، مثل ID, Title, Date, Type , Description. این جدول من رکوردهای بسیار زیادی داره (در حد 50 هزار تا)
اون طرف قضیه هم یک تیبل دارم با سه تا فیلد ID, FieldID, Value,
حالا من می خوام اطلاعات رو از تیبل اول بریزم به تیبل دوم بطوریکه شرایط زیر برقرار باشه.
اولین رکورد در تیبل اول می خوام به ترتیب بعنوان 5 تا رکورد در فیلد Value تیبل دوم ریخته بشه. بعنوان مثال فرض کنید اولین رکورد جدول اول من به این شکل باشه

<table border="1" cellpadding="1" cellspacing="1" style="width: 500px;">
<tbody>
<tr>
<td>description</td>
<td>Type</td>
<td>date</td>
<td>title</td>
<td>id</td>
</tr>
<tr>
<td>شرح اول</td>
<td>نوع اول</td>
<td>تاریخ اول</td>
<td>عنوان اول</td>
<td>1</td>
</tr>
<tr>
<td>شرح دوم</td>
<td>نوع دوم</td>
<td>تاریخ دوم</td>
<td>عنوان دوم</td>
<td>2</td>
</tr>
<tr>
<td>شرح سوم</td>
<td>نوع سوم</td>
<td>تاریخ سوم</td>
<td>عنوان سوم</td>
<td>3</td>
</tr>
</tbody>
</table>

حالا من می خوام اینا توی یک تیبل بشینه با این شکل


<table>
<tbody>
<tr>
<td>1</td>
<td>36</td>
<td>آی دی اول</td>
</tr>
<tr>
<td>1</td>
<td>37</td>
<td>عنوان اول</td>
</tr>
<tr>
<td>1</td>
<td>38</td>
<td>تاریخ اول</td>
</tr>
<tr>
<td>1</td>
<td>39</td>
<td>نوع اول</td>
</tr>
<tr>
<td>1</td>
<td>40</td>
<td>شرح اول</td>
</tr>
<tr>
<td>2</td>
<td>36</td>
<td>آی دی دوم</td>
</tr>
<tr>
<td>2</td>
<td>37</td>
<td>عنوان دوم</td>
</tr>
<tr>
<td>2</td>
<td>38</td>
<td>تاریخ دوم</td>
</tr>
<tr>
<td>2</td>
<td>39</td>
<td>نوع دوم</td>
</tr>
<tr>
<td>2</td>
<td>40</td>
<td>شرح دوم</td>
</tr>
<tr>
<td>3</td>
<td>36</td>
<td>آی دی سوم</td>
</tr>
<tr>
<td>3</td>
<td>37</td>
<td>عنوان سوم</td>
</tr>
<tr>
<td>3</td>
<td>38</td>
<td>تاریخ سوم</td>
</tr>
<tr>
<td>3</td>
<td>39</td>
<td>نوع سوم</td>
</tr>
<tr>
<td>3</td>
<td>40</td>
<td>شرح سوم</td>
</tr>
</tbody>
</table>

لطفا این کدها رو تو حالت دیزاین ببیند.
چیزی که مشخصه اینه که بعد از انتقال هر سطر جدول اول بعنوان پنج رکورد در فیلد Value تو تیبل دوم یک آی دی می خوره که پنج بار داره تکرار میشه.
و بعد اولین آی دی در جدول اول میاد درخانه های 1و6 و ... به فاصله پنج تا پنج تا میشینه و به همین ترتیب عنوان میاد در خانه های دوم، هفتم و ... (با ترتیب 5 تا 5 تا) می شینه
و به همین ترتیب تا آخر.
چیز دیگری که مشخصه اینه که مثلا آی دی های جدول اول میاد در FieldID=36 میشینه، عنوان میاد در FieldID=37 می شینه، تاریخ در FieldID=38، نوع در FieldID=39 و شرح در FieldID=40 و این روند تا انتها ادامه داره.
حالا من می خواستم این کار رو با Update انجام بدم و یا هر روش دیگری که اساتید پیشنهاد کنن.
هدف انتقال اطلاعات از تیبل قدیمی به جدید با شرایط ذکر شده هستش.
متشکرم بابت وقتی که برای مطالعه، تفکر و پاسخ به این سوال صرف می کنید

azarbara
جمعه 24 آبان 1392, 20:09 عصر
با تشکر من مشکلم حل شد

محمد سلیم آبادی
سه شنبه 28 آبان 1392, 11:02 صبح
اطلاع ندارم با چه روش و تکنیکی مشکلتون حل شده اما چیزی که اینجا مشخص هست عمل Un-pivoting هست:

SELECT id, d.a, d.b FROM table_name
CROSS APPLY (VALUES (col2,'col2'), (col3, 'col3'), (col4, 'col4'), (col5, 'col5'))D(a, b);

azarbara
سه شنبه 03 دی 1392, 21:46 عصر
اطلاع ندارم با چه روش و تکنیکی مشکلتون حل شده اما چیزی که اینجا مشخص هست عمل Un-pivoting هست:

SELECT id, d.a, d.b FROM table_name
CROSS APPLY (VALUES (col2,'col2'), (col3, 'col3'), (col4, 'col4'), (col5, 'col5'))D(a, b);

جناب سلیم آبادی فل واقع مشکل رو من به یک نحو دیگه حل کردم کلا صورت مسئله رو عوض کردم. من رو سایتم یه ماژول داشتم که این اطلاعات رو نشون میداد ولی بعد از آپگرید سایت ماژول به مشکل خورده بود. که مشکل ماژول رو حل کردم و اطلاعاتم رو تونستم تو سایت نشون بدم
و الان فکر کردم بهتره همین انتقال اطلاعات رو انجام بدم. لطف می کنید توضیح بیشتری بدید تا من این کار رو انجام بدم
جدول ها به ضمیمه ارسال گردیده است.

azarbara
چهارشنبه 04 دی 1392, 17:51 عصر
براتون امکانش هست که کوئری تبدیل تیبل بالایی رو به تیبل پایینی در پست بالا برام بنویسید. (فیلد سوم در تیبل دوم برام مهمه)؟