PDA

View Full Version : ترکیب چند رکورد در یک رکورد



khadem1386
پنج شنبه 10 بهمن 1387, 23:02 عصر
با سلام یک table داریم با 500100 رکورد. یک فیلد داره که داخل هر سلول یک کاراتر قرار داره:
A
F
C
D
R
E
G
G
Y
H
.
.
.

می خواهیم بوسیله QUERY یک جدول درست کنم که مثلا3 تا ستون داشته باشه و از فیلد اول از رکورد اول تغذیه بشه و فیلد دوم از رکورد دوم و فیلد سوم از رکود سوم و حالا جدول جدید یک در رکورد دوم فیلد اول خود، از رکود چهار م و همین طور تا آخر اینجوری:

A D R
Y H E
F Y R
. . .

یعنی یک جدول یک ستونی را در یک جدول سه ستونی بریزم یا جدول چهار ستونی.
یا n ستونی.


آیا می شه بدون استفاده از LOOP و فقط با دستورات SQL این کار را انجام داد.

و اگر لوپ تنها راه حل است بهترین الگوریتم چیه؟




با تشکر

AminSobati
جمعه 11 بهمن 1387, 20:01 عصر
سلام دوست عزیزم،
اگر از نسخه 2005 استفاده میکنید، این روش میتونه کمک کنه. ولی روی حجم بالا تستش نکردم:



declare @x table(c1 varchar(2))
insert @x values('a')
insert @x values('b')
insert @x values('c')
insert @x values('d')
insert @x values('e')
insert @x values('f')
insert @x values('g')
insert @x values('h')
insert @x values('i')
insert @x values('j')
insert @x values('k')
insert @x values('l')
insert @x values('m')
insert @x values('n')
insert @x values('o')
insert @x values('p')
insert @x values('q')
insert @x values('r')
insert @x values('s')
insert @x values('t')
insert @x values('u')

;with
cte1
as (select ntile(3) over (order by c1) as cnew,c1 from @x),
cte2
as (select dense_rank() over (partition by cnew order by c1) as cnew2, cnew, c1 from cte1)
select [1] as Col1, [2] as Col2, [3] as Col3 from cte2
pivot(max(c1) for cnew in ([1],[2],[3])) tmp

khadem1386
شنبه 12 بهمن 1387, 23:04 عصر
سلام و تشکر:

می شه درمورد این موارد توضیح بدید؟
اول من فکر می کنم varchar(1) کافی باشه.

دوم در موردX@ ( نام مناسبی برای table هست؟)

سوم درمورد کلمه over

کلمه partition

کلمه pivot

کلمه tmp


با تشکر از وقت شما

khadem1386
دوشنبه 14 بهمن 1387, 11:43 صبح
آیا می شود کمی مرا راهنمایی کنید؟

با تشکر

AminSobati
دوشنبه 14 بهمن 1387, 18:49 عصر
در مورد نام جدول و همچنین Varchar، شما به تناسب نیاز خودتون اون رو تغییر بدین. در مورد سایر موارد، میبایست مباحث Ranking Function و Pivot رو در یک منبع مطالعه بفرمایید