2011-11-17 198 views
3

假設,我有3列和9行的表,我使用SQL Server 2008的SQL查詢來獲取格式的結果從一個表

我想寫一個SQL查詢來獲取數據的前三行從原表中的一行 行然後從第4行到第6行獲取數據並放入第二行等等。

表名是 「表1」

Primary_Key | Name | Age 

++++++++++++++++++++++++++++ 


A |  Kyle | 45 

B |  Rob | 66 

C |  Dhruba | 77 

D |  Susan | 99 

E |  Steve | 100 

F |  Mili | 34 

G |  Grover | 54 

H  |  Alan | 76 

I |  Paul | 16 

我找的這個結果我運行查詢後:(3行,1列)提前

ColumnA 


+++++++++++++++ 

A, Kyle, 45, B, Rob,66, C,Dhruba,77 

D,Susan,99, E,Steve , 100,F, Mili, 34 

G ,   Grover , 54,H ,  Alan ,  76,I ,  Paul ,  16 

謝謝! 「

+1

」從原始表中獲得前三行數據在一行中「。您是否打算將一列中的三個值彙總爲一個值? – Kash

+1

表格定義,樣本數據和預期輸出將非常有用。您還需要包含一個定義行(如果行)的列。 –

+1

更不用說爲了達到預期輸出而遵循的規則:) – Nonym

回答

1
declare @T table 
(
    Primary_Key char(1), 
    Name varchar(10), 
    Age int 
) 

insert into @T values 
('A' ,  'Kyle' , 45), 
('B' ,  'Rob' , 66), 
('C' ,  'Dhruba' , 77), 
('D' ,  'Susan' , 99), 
('E' ,  'Steve' , 100), 
('F' ,  'Mili' , 34), 
('G' ,  'Grover' , 54), 
('H' ,  'Alan' , 76), 
('I' ,  'Paul' , 16) 

;with C as 
(
    select *, 
     (row_number() over(order by Primary_Key) - 1)/3 as rn 
    from @T 
) 
select stuff((select ', '+C2.Primary_Key+', '+C2.Name+', '+cast(C2.Age as varchar(10)) 
       from C as C2 
       where C1.rn = C2.rn 
       for xml path(''), type).value('.', 'varchar(max)'), 1, 2, '') as ColumnA 

from C as C1 
group by C1.rn 
order by C1.rn 
+0

好的嘗試,但這似乎並不奏效。語法問題我猜。還想使用NTILE(3)而不是ROW_NUMBER – Kash

+0

@Kash它確實有效。在這裏嘗試。 http://data.stackexchange.com/stackoverflow/q/118181/ –

+0

@Kash示例數據的插入語句需要SQL Server 2008,查詢需要SQL Server 2005或更高版本。如果你有9行,使用ntile(3)將是正確的。 –