繁体   English   中英

使用SQL中的多个数据透视表将行转换为列

[英]Converting rows to columns using multiple pivot in sql

我已经编写了一个查询,以针对第4、5和6个月使用多个数据透视函数将行转换为列。我确实成功地将行转换为列。 下面是查询:

(SELECT [team], 
Count_Of_OrderId,
    Count_Of_OId,
            Avg_a,
            [Count_of_u]  ,
    convert(varchar(max),[month_from_Date])+'_COID'  as 
month_from_Date_COAID, 
    convert(varchar(max),[month_from_Date]) + '_COID' as 
 month_from_Date_CODID,
    convert(varchar(max),[month_from_Date])+'_Avg_a'  as 
month_from_Date_Avg_a, 
    convert(varchar(max),[month_from_Date])+'_Count_of_u'  as 
month_from_Date_Count_of_u

FROM [MyTable]) AS S  
PIVOT  
(  
    MAX(Count_Of_OrderId,)
    FOR [month_from_Date_COAID] IN ([4_COID], [5_COID], [6_COID])  
)   AS PivotTable1

PIVOT  
(  
    MAX(Count_Of_OId)
    FOR [month_from_Date_CODID] IN ([4_COID], [5_COID], [6_COID])  
)   AS PivotTable2

PIVOT  
(  
    MAX(Avg_a)
    FOR [month_from_Date_Avg_a] IN ([4_Avg_a], [5_Avg_a], [6_Avg_a])  
)   AS PivotTable3
PIVOT  
(  
    MAX(Count_of_users)
    FOR [month_from_Date_Count_of_u] IN ([4_Count_of_u], [5_Count_of_u], 
[6_Count_of_u])  
)   AS PivotTable4

所以输出是:

+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+
|  Team  | COAID_4 | COAID_5 | COAID_6 | CODID_4 | CODID_5 | CODID_6 | Avg_a_4 | Avg_a_5 | Avg_a_6 | Count_of_u_4 | Count_of_u_5 | Count_of_u_6 |
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+
| Team A | NULL    | NULL    | 17      | NULL    | NULL    | 15      | NULL    | NULL    | 1.13    | NULL         | NULL         | 7            |
| Team A | NULL    | 14      | NULL    | NULL    | 14      | NULL    | NULL    | 1       | NULL    | NULL         | 6            | NULL         |
| Team A | 9       | NULL    | NULL    | 7       | NULL    | NULL    | 1.29    | NULL    | NULL    | 5            | NULL         | NULL         |
| Team B | NULL    | NULL    | 12159   | NULL    | NULL    | 6482    | NULL    | NULL    | 1.88    | NULL         | NULL         | 40           |
| Team B | NULL    | 14287   | NULL    | NULL    | 6525    | NULL    | NULL    | 2.19    | NULL    | NULL         | 39           | NULL         |
| Team B | 15822   | NULL    | NULL    | 7117    | NULL    | NULL    | 2.22    | NULL    | NULL    | 40           | NULL         | NULL         |
| Team C | NULL    | NULL    | 293     | NULL    | NULL    | 174     | NULL    | NULL    | 1.68    | NULL         | NULL         | 6            |
| Team C | NULL    | 318     | NULL    | NULL    | 221     | NULL    | NULL    | 1.44    | NULL    | NULL         | 6            | NULL         |
| Team C | 312     | NULL    | NULL    | 183     | NULL    | NULL    | 1.7     | NULL    | NULL    | 6            | NULL         | NULL         |
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+

在这里,团队分为4、5、6个月的3行。 我想得到的O / P为:

+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+
|  Team  | COAID_4 | COAID_5 | COAID_6 | CODID_4 | CODID_5 | CODID_6 | Avg_a_4 | Avg_a_5 | Avg_a_6 | Count_of_u_4 | Count_of_u_5 | Count_of_u_6 |
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+
| Team A |       9 |      14 |      17 |       7 |      14 |      15 |    1.29 |       1 |    1.13 |            5 |            6 |            7 |
| Team B |   15822 |   14287 |   12159 |    7117 |    6525 |    6482 |    2.22 |    2.19 |    1.88 |           40 |           39 |           40 |
| Team C |     312 |     318 |     293 |     183 |     221 |     174 |     1.7 |    1.44 |    1.68 |            6 |            6 |            6 |
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+

我不确定代码中的错误是什么。

使用MAX简单方法

SELECT Team,
       MAX(COAID_4),
       MAX(COAID_5),
       MAX(COAID_6),
       ....
FROM T
GROUP BY Team

T是您当前的查询结果SQL。

但是我认为您正在寻找条件汇总功能来枢纽。

SELECT 
      [team], 
      MAX(CASE WHEN month_from_Date = 4 THEN Count_Of_OrderId END) '4_COID',
      MAX(CASE WHEN month_from_Date = 5 THEN Count_Of_OrderId END) '5_COID',
      MAX(CASE WHEN month_from_Date = 6 THEN Count_Of_OrderId END) '6_COID',
      MAX(CASE WHEN month_from_Date = 4 THEN Count_Of_OId END) '4_COID',
      MAX(CASE WHEN month_from_Date = 5 THEN Count_Of_OId END) '5_COID',
      MAX(CASE WHEN month_from_Date = 6 THEN Count_Of_OId END) '6_COID',
      MAX(CASE WHEN month_from_Date = 4 THEN Avg_a END) '4_Avg_a',
      MAX(CASE WHEN month_from_Date = 5 THEN Avg_a END) '5_Avg_a',
      MAX(CASE WHEN month_from_Date = 6 THEN Avg_a END) '6_Avg_a',
      MAX(CASE WHEN month_from_Date = 4 THEN Count_of_users END) '4_Count_of_u',
      MAX(CASE WHEN month_from_Date = 5 THEN Count_of_users END) '5_Count_of_u',
      MAX(CASE WHEN month_from_Date = 6 THEN Count_of_users END) '6_Count_of_u'
FROM [MyTable]
GROUP BY [team]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM