【问题标题】:Create query for below output using pivot使用数据透视为以下输出创建查询
【发布时间】:2018-05-28 04:09:41
【问题描述】:

我想根据以下要求使用多列来旋转我的表格。

Employee_ID ProcessingMonth Amount      FinancialYear
3           April           41668.00    2017
3           June            41668.00    2017
3           March           41668.00    2017
3           May             41668.00    2017
4           April           10037.92    2017
4           June            10037.92    2017
4           March           10037.92    2017
4           May             10037.92    2017

我想要如下结果

Employee_ID year jan feb mar      apr      may      june     jul aug sep oct nov dec
3           2017 0   0   41668.00 41668.00 41668.00 41668.00 0   0   0   0   0   0
4           2017 0   0   10037.92 10037.92 10037.92 10037.92 0   0   0   0   0   0

【问题讨论】:

    标签: sql sql-server sql-server-2012 sql-server-2014 sql-server-2016


    【解决方案1】:

    试试这个:

    SELECT *
    FROM (
        SELECT 
              SUM(Amount) AS sum_amount
            , Employee_ID
            , FinancialYear
            , ProcessingMonth
        FROM your_table
        GROUP BY
              Employee_ID
            , FinancialYear
            , ProcessingMonth
    ) t
    PIVOT (SUM(sum_amount)
        FOR ProcessingMonth IN ( 
            [January], [February], [March], [April], [May], [June], [July], [August], [September], [October], [November], [December])
        ) AS pvt;
    

    【讨论】:

      【解决方案2】:

      当条件聚合更简单时,您为什么想要使用pivot

      SELECT Employee_ID,
             SUM(CASE WHEN ProcessingMonth = 'January' THEN Amount ELSE 0 END) as Jan,
             SUM(CASE WHEN ProcessingMonth = 'February' THEN Amount ELSE 0 END) as Feb,
             . . . 
      FROM t
      GROUP BY Employee_ID, FinancialYear;
      

      不需要子查询。你得到你指定的列名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        相关资源
        最近更新 更多