TSQL-Select - 将多行转换为单行

时间:2016-10-13 07:13:28

标签: sql-server sql-server-2008 tsql pivot

我必须处理以下表结构,其中列存储为行:

CREATE TABLE Test 
    (
     ID varchar(10), 
     RowNumber int, 
     Column1 varchar(200), -- sheet name
     Column2 varchar(200), -- column name
     Column3 varchar(200)  -- column cell value
    );

INSERT INTO Test
(ID, RowNumber,Column1,Column2, Column3)
VALUES
('ID0001', 1, 'sheet abc','InternalNumber','2016_2923_2321'),
('ID0001', 2, 'sheet abc','Customer','ACME'),
('ID0001', 3, 'sheet abc','Project','ABC_Project'),
('ID0001', 4, 'another sheet name','Subject','New Model'),
('ID0001', 5, 'another sheet name','SOP','2016'),
('ID0001', 6, 'another sheet name','EOP','2022')

我设法将行转换为正确的列(请参阅底部的小提琴),但我想将数据放入单行中,而不是{{1}中的每个值。 }是一个独特的名称。

在下面的图片中,顶部是输入表,第二个是我的,第三个是我想要的输出,我无法工作:

Table

另请参阅我的fiddle

我希望你能帮我解决这个问题。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

基本方法是使用PIVOT

SELECT *
FROM (
    SELECT  ID,
            Column2, 
            Column3
    FROM #Test
) as t
PIVOT (
    MAX(Column3) FOR Column2 IN ([InternalNumber],[Customer],[Project],[Subject],[SOP],[EOP])
) as p

输出:

ID      InternalNumber  Customer    Project     Subject     SOP     EOP
ID0001  2016_2923_2321  ACME        ABC_Project New Model   2016    2022

如果Column2中有更多值,请更好地使用动态SQL。