SQL жестко закодированный поворот данных
У меня есть некоторые счета-фактуры налогового анализа "по вертикали", и мне нужно "свернуть" их. Я использую SQL Server 2008R2
Упрощенный пример с кодом:
"вертикальный" пример результатов
15 9 NET 112.07 1/5156
15 9 VAT9 17.93 1/5156
26 18 NET 4.29 1/5157
26 18 VAT18 1.38 1/5157
Код для его воссоздания:
CREATE TABLE #dummy
(department_id numeric(10,0),
vat_category_id numeric(10,0),
amount_category char(5),
amount numeric(10,2),
invoice_no char(10))
INSERT #yy VALUES(15, 9, 'NET', 112.07, '1/5156')
INSERT #yy VALUES(15, 9, 'VAT9', 17.93, '1/5156')
INSERT #yy VALUES(26, 18, 'NET', 4.29, '1/5157')
INSERT #yy VALUES(26, 18, 'VAT18',1.38, '1/5157')
Как он должен быть разбит:
CREATE TABLE #pivot
(department_id numeric(10,0),
net_amount numeric(10,0),
vat_category_id9_amount numeric(10,2),
vat_category_id18_amount numeric(10,2),
gross_amount numeric(10,2))
Примерный пример запрошенного результата:
1/5156 112.07 17.93 null 130
1/5157 4.29 null 1.38 5,67
Любая помощь ценится!
1 ответ:
Вы можете использовать
conditional
агрегацию:select invoice_no, sum(case when amount_category = 'NET' then amount else 0 end), sum(case when amount_category = 'VAT9' then amount else 0 end), sum(case when amount_category = 'VAT18' then amount else 0 end), sum(amount) from #dummy d group by invoice_no;