在sql中使用多透视将行转换为列
我编写了一个查询,使用多个pivot函数将第4、5和6个月的行转换为列。我确实成功地将行转换为列。以下是查询:在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
(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中将月份作为输入参数吗。