TSQL-Select-превращение нескольких строк в одну строку
Я имею дело со следующей структурой таблицы, в которой столбцы хранятся как строки:
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
является уникальным именем.
На рисунке ниже вверху находится входная таблица, вторая-то, что у меня есть, а третья-мой желаемый выход, до которого я не могу добраться работа:
Смотрите также мою скрипку
Я надеюсь, что вы можете помочь мне решить эту проблему.Заранее благодарю вас.
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.