【发布时间】:2015-12-01 10:16:48
【问题描述】:
我正在尝试对 SQL Server 2012 中的多个列进行动态透视
我的表如下
customer UnitNo invoiceNo invDate heads Amt periodFrmDT periodToDT
abc GF-3 C0000001 2015-11-01 Charge1 100 2015-11-01 2015-11-30
abc GF-3 C0000001 2015-11-01 Charge2 500 2015-11-10 2015-12-10
abc GF-3 C0000001 2015-11-01 charge3 600 2015-10-01 2015-10-30
我想要下面的结果
customer unitNo invoiceNo invDate Charge1 PeriodFrmDT periodToDT Charge2 PeriodFrmDT periodToDT Charge3 PeriodFrmDT periodToDT
abc GF-3 C0000001 2015-11-01 100 2015-11-01 2015-11-30 500 2015-11-10 2015-12-10 600 2015-10-01 2015-10-30
我已经试过了
select * from (
select c.Customer,unitNo, ih.invoiceNo
,bh.heads,it.Amt,periodFrmDT,PeriodToDT
from invHeader ih
inner join customer c on c.custID =ih.custID
inner join mstUnit mu on mu.unitID=ih.unitID
inner join invTran it on it.invID=ih.invHeaderID
inner join billingHeads bh on bh.BillHeadID=it.headID
)P
Pivot
(
max(amt)
for Head in([charge1],[charge2],[charge3])
) as pvt
请帮忙..
【问题讨论】:
-
为什么它需要是动态的——是不是因为你不知道'Charge1'、'Charge2'和'Charge3'实际上会说什么?另外,如果你有不止一行 abc, GF-3, C0000001, 2015-11-01 你想如何总结 Amt、periodfromDT 和 peroidToDat?总和?最早的日期,最晚的日期?因为这需要测试,请您提供代码来创建您的第一个表,所以我们不必这样做。 (即声明@table1 表...并插入@table1)
-
另外,您需要先取消透视。
标签: sql sql-server pivot