У меня есть набор данных в студии управления SQL Server 17, который требует некоторого поворота, чтобы свернуть несколько строк в одну строку для удобства чтения и экономии места. Для каждого уникального идентификатора существует набор кодов, которые действуют как операторы для значений с целью отображения результатов в итоговом столбце в конце. Я выполнил первичный поворот с одним набором кодов, но похоже, что мне нужно сделать второй, чтобы выполнить дальнейшее свертывание/объединение.
Вот некоторые несводные данные
PO_NUM u_id CODE_1 CODE_2 VALUE
---------------------------------------
0M274316 1 3 9;13 150
0N274316 1 9 9 200000
0O274316 1 6 9 210000
0P274316 1 6 13 21000
0Q274316 1 6 9 50000.5
0R274316 1 15 9 0
0M274317 2 3 9;13 150
0N274317 2 9 9 300000
0O274317 2 6 9 220000
0P274317 2 6 13 22000
0Q274317 2 6 8 90000.5
0R274317 2 15 8 0
С образцом сводки с первым уникальным идентификатором в качестве примера я получаю:
PO_NUM uid CODE_1 CODE_2 6 9 15
-----------------------------------------------------
0M274316 1 3 9;13 210000 200000 0
0M274316 1 9 21000 NULL NULL
0M274316 1 13 50000.5 NULL NULL
Что мне нужно сделать, так это еще один свод, чтобы иметь «9; 13» в качестве столбцов с суммами, используемыми со значениями. У меня есть эта начальная команда поворота как:
SELECT PO_NUM, CODE_1, CODE_2, VALUE from table
Pivot (max(VALUE) for CODE_2 in ([6],[9],[15])) pvt1
Что объединяет данные, как и ожидалось, когда я не включаю значения CODE_1. Но попытка добавить вторую сводную точку с CODE_2 только еще больше испортит данные. Как выполнить поворот во второй раз, используя данные, полученные из первой команды? Ожидаемый результат:
PO_NUM uid 6 9 15 9;13 9(2) 13 total
------------------------------------------------------------------------
0M274316 1 281000.5 200000 0 150 null null 481150.5
По сути, их строки были свернуты в одну, а коды разбиты на столбцы. На самом деле столбцы будут переименованы, чтобы избежать конфликтов с именами, поэтому я использовал 9(2) только для того, чтобы показать, что данные все еще там.
Извините за правки.