2017-06-28 133 views
2

我想擺動一個Microsoft SQL數據庫表,但我無法讓它工作。我可以找到的例子是數字,並添加或加入它們。數據透視SQL表與文本行

這是我走到這一步,但很少更迭:

select * 
from 
(
    select CODE, LangID , Text 
    from dbo.REJECT_CODES 
) src 
pivot 
(
    Text 
    for LangID in ([1], [2], [3], [4]) 
) piv; 

這是我想透視表的一個例子:

Code LangID Text 
-------------------------------------------- 
    1  1  Text1 
    1  2  Text2 
    1  3  Text3 
    1  4  Text4 
    2  1  Text5 
    2  2  Text6 
    2  3  Text7 
    2  4  Text8 

這是結果我想:

Code TextA TextB TextC TextD 
---------------------------------------------- 
    1  Text1 Text2 Text3 Text4 
    2  Text5 Text6 Text7 Text8 
+0

試試吧。你會看到這些例子不是關於數字的。儘管使用聚合函數,你必須在單元格中放置* something *。那個'Text1'從哪裏來?什麼是'TextA'? –

+0

請發佈*實際*的輸入數據和期望的結果的例子。請記住,PIVOT不適用於任意數量的列。它生成的單元格值*有*爲聚合 - 它們是按行/列值對輸入進行分組的結果 –

+0

@PanagiotisKanavos我知道這是一個大問題,我無法獲得此透視函數的工作原因,因爲所有示例都是與數字。我的SQL知識也不高。 Text1只是來自現有表的數據,如上所示,TextA是要創建的表的列名。 – Jeffrey

回答

3

試試這個:

create table #temp (code int, languageID int, text varchar(10)) 
    insert into #temp values 
    (1,1,'Text1'), 
    (1,2,'Text2'), 
    (1,3,'Text3'), 
    (1,4,'Text4'), 
    (2,1,'Text5'), 
    (2,2,'Text6'), 
    (2,3,'Text7'), 
    (2,4,'Text8') 




select CODE, [1] As TextA, [2] As TextB, [3] As TextC, [4] As TextD 
from 
(
    select CODE, LanguageID , Text 
    from #temp 
) src 
pivot 
(
    max(Text) 
    for LanguageID in ([1], [2], [3], [4]) 
) piv; 

OP:

CODE  TextA  TextB  TextC  TextD 
----------- ---------- ---------- ---------- ---------- 
1   Text1  Text2  Text3  Text4 
2   Text5  Text6  Text7  Text8 
1

嘗試像Max聚合函數:

declare @tmp table( Code int, LangID int, Text nvarchar(50)) 


insert into @tmp select 1,1,'Text1' 
insert into @tmp select 1,2,'Text2' 
insert into @tmp select 1,3,'Text3' 
insert into @tmp select 1,4,'Text4' 
insert into @tmp select 2,1,'Text5' 
insert into @tmp select 2,2,'Text6' 
insert into @tmp select 2,3,'Text7' 
insert into @tmp select 2,4,'Text8' 

select * from @tmp 

select * 
from 
(
    select CODE, LangID , Text 
    from @tmp 
) src 
pivot 
(
    max(Text) 
    for LangID in ([1], [2], [3], [4]) 
) piv; 

結果:

+------+-------+-------+-------+-------+ 
| CODE | 1 | 2 | 3 | 4 | 
+------+-------+-------+-------+-------+ 
| 1 | Text1 | Text2 | Text3 | Text4 | 
| 2 | Text5 | Text6 | Text7 | Text8 | 
+------+-------+-------+-------+-------+