【问题标题】:How to use pivot and have 2 different aggregate functions?如何使用数据透视并拥有 2 个不同的聚合函数?
【发布时间】:2016-04-01 09:05:10
【问题描述】:

我有一个包含 1 个日期列的表格。我想按年和月对日期进行分组,这样我就有了一个矩阵,例如:

Year Jan Feb Mar...Dec Total
2015.....
2016  10  15  10... 10   115
2017.....

这是否可以使用PIVOT函数来实现,我究竟如何使用它来实现上述?

【问题讨论】:

    标签: sql sql-server sql-server-2014


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-12
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多