SQL 硬编码数据透视

标签 sql sql-server sql-server-2008 pivot

我有一些“垂直”发票税务分析,我需要“旋转”它们。 我正在使用 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

感谢任何帮助!

最佳答案

您可以使用条件聚合:

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;

关于SQL 硬编码数据透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50701718/

相关文章:

mysql - 加入更多父表

mysql - 无法删除或更新父行: a foreign key constraint fails

sql - 表值函数 - 输出中忽略排序依据

mysql - 如果数据库更新中存在记录,则在 sql 数据库中创建新记录

tsql - 地理围栏代码 - 纯 SQL server 2008 实现

sql - 复杂多阶段搜索的一般策略

sql - 计算最近时间的优雅方法

Mysql查询获取两个表之间的信息

sql-server - 使用动态 SQL 创建报告

sql-server-2008 - SQL Server 2008 排队事务复制与合并复制