【问题标题】:Pivoting two columns with sum [duplicate]用总和旋转两列[重复]
【发布时间】:2019-05-22 22:22:06
【问题描述】:

这是我的示例表

**BranchId   GroupCode  Cash    Credit**
1000                AA  10      8644
1000                AA  12      1244
1000                BB  20      7535
1000                CC  30      5633
1001                AA  50      5763
1001                AA  34      2343
1001                BB  60      1000
1001                BB  62      2346
1002                BB  34      1600
1002                CC  68      1700

我想要这种形式的示例输出,如下所示

**BranchId | AA_Cash | AA_Credit | BB_Cash | BB_Credit | CC_Cash | CC_Credit**
1000         ?                      
1001                        
1002    

? = 我需要每个分行的现金和信用总和

select * from
(select bid, GroupCode, Cash FROM dueList) as T 
PIVOT (sum(Cash) for GroupCode in([AA_Cash],[BB_Cash],[CC_Cash])) PT

此 SQL 给出输出但只有现金列,我需要在输出中添加信用列设置。

我尝试使用以下链接

In Sql Server how to Pivot for multiple columns

但在我的数据库中只有 16 个分支。一旦我在上面的链接中尝试示例,它就会显示分支的重复行和数字区域中的大量空值。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以先通过 UNPIVOTing 来 PIVOT 多列数据

    为了获得更好的视觉效果,请在 src 子查询中运行 SELECT

    示例

    Select *
     From  (
            Select A.BranchID
             From  YourTable A
             Cross Apply ( values (GroupCode+'_Cash'  ,Cash)
                                 ,(GroupCode+'_Credit',Credit)
                         ) B(Item,Value)
           ) src
     Pivot (sum(Value) for Item in ([AA_Cash],[AA_Credit]
                                   ,[BB_Cash],[BB_Credit]
                                   ,[CC_Cash],[CC_Credit]
                                   ) )pvt
    

    编辑

    在旁注中,仅使用所需的列“馈送”您的数据透视表很重要。在您发布的示例中,您包含了GroupCode。这会产生额外的记录。

    【讨论】:

      【解决方案2】:

      只需使用条件聚合!

      select BranchId,
             sum(case when groupcode = 'AA' then cash end) as aa_cash,
             sum(case when groupcode = 'AA' then credit end) as aa_credit,
             sum(case when groupcode = 'BB' then cash end) as bb_cash,
             sum(case when groupcode = 'BB' then credit end) as bb_credit,
             sum(case when groupcode = 'CC' then cash end) as cc_cash,
             sum(case when groupcode = 'CC' then credit end) as cc_credit
      from t
      group by BranchId;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2018-03-02
        • 1970-01-01
        • 2021-05-08
        • 2018-12-15
        相关资源
        最近更新 更多