SQL Server Pivot在多个字段上
我已经在该网站上搜索了所有可能的解决方案,但仍然找不到我的Pivot问题的答案。
我有一张包含以下数据的表。
Portfolio | Date | TotalLoans | ActiveLoans | TotalBalance--------------------------------------------------------------------
P1 | 2015-12-31 | 1,000 | 900 | 100,000.00
P1 | 2015-11-30 | 1,100 | 800 | 100,100.00
P1 | 2015-10-31 | 1,200 | 700 | 100,200.00
我正在尝试使用以下输出创建枢轴(仅在Portfolio = P1的情况下)
Field | 2015-12-31 | 2015-11-30 | 2015-10-31 |-----------------------------------------------------
TotalLoans | 1,000 | 1,100 | 1,200 |
ActiveLoans | 900 | 800 | 700 |
TotalBalance | 100,000 | 100,100 | 100,200 |
理想情况下,我正在寻找动态枢纽,但是静态查询也可以,并且我可以尝试动态查询。
回答:
您需要先到
您的桌子。您可以使用以下查询进行操作:
SELECT Portfolio, [Date], Val, ColTypeFROM (SELECT Portfolio,
[Date],
TotalLoans,
ActiveLoans,
TotalBalance
FROM mytable
WHERE Portfolio = 'P1') AS srcUnpivot
UNPIVOT (
Val FOR ColType IN (TotalLoans, ActiveLoans, TotalBalance)) AS unpvt
Portfolio Date Val ColType===============================================
P1 2015-12-31 1000 TotalLoans
P1 2015-12-31 900 ActiveLoans
P1 2015-12-31 100000 TotalBalance
P1 2015-11-30 1100 TotalLoans
P1 2015-11-30 800 ActiveLoans
P1 2015-11-30 100100 TotalBalance
P1 2015-10-31 1200 TotalLoans
P1 2015-10-31 700 ActiveLoans
P1 2015-10-31 100200 TotalBalance
所有 不可透视的字段都必须是 同一类型 。上面的查询假定所有字段的类型均为 int 。如果不是这种情况,则必须使用CAST
。
使用以上查询,您可以应用PIVOT
:
SELECT Portfolio, ColType, [2015-12-31], [2015-11-30], [2015-10-31]FROM (
... above query here ...
PIVOT (
MAX(Val) FOR [Date] IN ([2015-12-31], [2015-11-30], [2015-10-31])) AS pvt
以上是 SQL Server Pivot在多个字段上 的全部内容, 来源链接: utcz.com/qa/408042.html