TSQL-Select - 将多行变成单行
TSQL-Select - Turn multiple Rows into single Row
我必须处理以下 table 结构,其中列存储为行:
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')
我设法将行转换为适当的列(请参阅底部的 fiddle)但我不想获取多行,而是想将数据放入单个行,因为 Column2
中的每个值都是唯一名称。
下图顶部是输入 table,第二个是我拥有的,第三个是我想要的输出我无法工作:
另见我的fiddle
希望你能帮我解决这个问题
提前致谢。
基本的方法是使用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。
我必须处理以下 table 结构,其中列存储为行:
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')
我设法将行转换为适当的列(请参阅底部的 fiddle)但我不想获取多行,而是想将数据放入单个行,因为 Column2
中的每个值都是唯一名称。
下图顶部是输入 table,第二个是我拥有的,第三个是我想要的输出我无法工作:
另见我的fiddle
希望你能帮我解决这个问题
提前致谢。
基本的方法是使用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。