如何使用数据透视并拥有 2 个不同的聚合函数?
Posted
技术标签:
【中文标题】如何使用数据透视并拥有 2 个不同的聚合函数?【英文标题】:How to use pivot and have 2 different aggregate functions? 【发布时间】:2016-04-01 09:05:10 【问题描述】:我有一个包含 1 个日期列的表格。我想按年和月对日期进行分组,这样我就有了一个矩阵,例如:
Year Jan Feb Mar...Dec Total
2015.....
2016 10 15 10... 10 115
2017.....
这是否可以使用PIVOT
函数来实现,我究竟如何使用它来实现上述?
【问题讨论】:
【参考方案1】:你可以在没有 PIVOT 的情况下实现
SELECT
DATEPART(yyyy,t.the_date) as year,
SUM(CASE WHEN DATEPART(mm,t.the_date)=1 THEN 1 ELSE 0 END) as Jan,
SUM(CASE WHEN DATEPART(mm,t.the_date)=2 THEN 1 ELSE 0 END) as Feb,
...
SUM(CASE WHEN DATEPART(mm,t.the_date)=12 THEN 1 ELSE 0 END) as Dec,
COUNT(*) as Total
FROM the_table t
GROUP BY DATEPART(yyyy,t.the_date)
【讨论】:
这也有效。是否仍然可以使用PIVOT
进行这样的查询,并且它的性能是否比GROUP BY
更好。【参考方案2】:
尝试使用这个查询:-
SELECT *
FROM (
SELECT
year(yourDate) as [year],left(datename(month,yourDate),3)as [month],
Amount
FROM YourTableName
) as s
PIVOT
(
SUM(Amount)
FOR [month] IN (jan, feb, mar, apr,
may, jun, jul, aug, sep, oct, nov, dec)
)AS pvt
【讨论】:
以上是关于如何使用数据透视并拥有 2 个不同的聚合函数?的主要内容,如果未能解决你的问题,请参考以下文章
在数据透视聚合函数中使用CONCAT函数的SQL Server错误