Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql中使用多透视将行转换为列_Sql_Sql Server_Tsql_Ssms - Fatal编程技术网

在sql中使用多透视将行转换为列

在sql中使用多透视将行转换为列,sql,sql-server,tsql,ssms,Sql,Sql Server,Tsql,Ssms,我编写了一个查询,使用多个pivot函数将第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(v

我编写了一个查询,使用多个pivot函数将第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         |
+--------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--------------+--------------+--------------+
在第四、第五和第六个月,团队分成三排。我想将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]

太棒了,它成功了!谢谢但是知道Pivot函数出了什么问题吗?如果我需要在每个季度而不是查询中的特定月份使用它,我可以在SP中将月份作为输入参数吗。