我想不出这样做除了运行基于两个完全独立的PIVOT
S,每一次,原始的源数据的任何方式。
所以我搬到子选择成CTE,以避免重蹈其定义,然后我加入两个转动的PaymentMethod
结果的基础:
declare @t table (PaymentMethod varchar(30) not null, SubTotal int not null,
OrderDate date not null)
insert into @t(PaymentMethod,SubTotal,OrderDate) values
('Cash',10,'20150101'), ('Cash',20,'20151231'),
('Cash',30,'20160101'), ('Cash',90,'20161231')
;With ToBePivoted as (
SELECT PaymentMethod, SubTotal, YEAR(OrderDate) AS [YEAR]
FROM @t
)
SELECT s.PaymentMethod, s.[2016],a.[2016], s.[2015], a.[2015]
FROM
ToBePivoted tbp1
PIVOT(SUM(SubTotal) FOR [YEAR] IN([2016], [2015])) AS s
inner join
ToBePivoted tbp2
pivot(AVG(SubTotal) FOR [YEAR] IN([2016],[2015])) AS a
ON
s.PaymentMethod = a.PaymentMethod
结果:
PaymentMethod 2016 2016 2015 2015
------------------------------ ----------- ----------- ----------- -----------
Cash 120 60 30 15
这里的问题是:a)我们想要使用不同的总量(不允许在一个单一的PIVOT
内)和b)PIVOT
“用尽”PIVOT
第一部分中提到的栏。这意味着在第一个PIVOT
之后,没有任何包含年份的列允许直接应用第二个数据透视表。
你太棒了。非常感谢。就我而言,我有5个以上的聚合列,但您的逻辑看起来更简单。 – user1396423