我有一群人。我们称它们为A、B、C。我有一张表格,显示他们每个月的工资......
PERSON|MONTH|PAID
A JAN 10
A FEB 20
B JAN 10
B FEB 20
B SEP 30
C JAN 10
C JUNE 20
C JULY 30
C SEP 40
这张桌子可以而且确实可以持续很多年。
有没有一种方法可以在如下所示的表中旋转该表(据我所知,实际上不需要聚合,这通常是在数据透视中完成的)?
JAN FEB MAR APR MAY JUN JUL AGU SEP
A 10 20
B 10 20 - - - - - - 30
C 10 - - - - 20 30 - 40
以前没有遇到过类似的问题,但假设这是一个常见问题,有什么想法吗?
如果您使用的是 SQL Server 2005(或更高版本),代码如下:
DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)
SELECT @cols = STUFF(( SELECT distinct ',' + QuoteName([Month])
FROM YourTable FOR XML PATH('') ), 1, 1, '')
SET @sqlquery = 'SELECT * FROM
(SELECT Person, Month, Paid
FROM YourTable ) base
PIVOT (Sum(Paid) FOR [Person]
IN (' + @cols + ')) AS finalpivot'
EXECUTE ( @sqlquery )
无论您有多少种不同的状态,这都将起作用。它动态地组装一个查询PIVOT
。使用动态列执行 PIVOT 的唯一方法是动态组装查询,这可以在 SQL Server 中完成。
其他例子:
- 也许是 SQL Server PIVOT? https://stackoverflow.com/questions/7182106/sql-server-pivot-perhaps/7182489#7182489
- 如何通过使用 SQL Server 连接到单个表来构建摘要? https://stackoverflow.com/questions/6849678/how-do-i-build-a-summary-by-joining-to-a-single-table-with-sql-server/6849795#6849795
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)