我在一个表中得到了一些数据,如下所示。我正在尝试运行一个查询,该查询将在每个requestId的一行中获取我的数据。我不需要日期或拒绝原因,只需要每个groupId 的eprojman和apvStatus
requestId-projMan1-apvStatus1-projMan2-apvStatue2-projMan3-apvStatus 3等。用于所有5个组ID的
请求Id | 组Id | 进入日期批准日期apvStatus | projMan | 拒绝原因[/tr>|
---|---|---|---|---|
1 | 1 | 2020-11-02 | 2019-07-25 | 已批准rx1942空 |
1 | 2 | 2020年11月2日 | <2019-07-25>已批准ma2674 | 空|
1 | 3 | 2020-11-02 | 2019-07-25 | 已批准cb9097空|
1 | 4 | 2020-11-02 | 2019-07-25 | 已批准bj1763空|
1 | 5 | 2020-11-02 | 2019-07-25 | 已批准tr5972空 |
2 | 1 | 2020-11-02 | ||
2 | 2 | 2020-11-02 | 空 | 待处理 | ma2674空
2 | 3 | 2020年11月2日 | 空 | 待处理>cb9097 | 空
2 | 4 | 2020-11-02空 | 待决bj1763空||
2 | 5 | 2020年11月2日 | 空 | 待决tr5972>空 |
对于多列的数据透视,将CASE
表达式与聚合一起使用更容易。
select t.requestId,
projMan1 = max(case when t.groupId = 1 then t.projMan end),
apvStatus1 = max(case when t.groupId = 1 then t.apvStatus end),
projMan2 = max(case when t.groupId = 2 then t.projMan end),
apvStatus2 = max(case when t.groupId = 2 then t.apvStatus end),
projMan3 = max(case when t.groupId = 3 then t.projMan end),
apvStatus3 = max(case when t.groupId = 3 then t.apvStatus end),
projMan4 = max(case when t.groupId = 4 then t.projMan end),
apvStatus4 = max(case when t.groupId = 4 then t.apvStatus end),
projMan5 = max(case when t.groupId = 5 then t.projMan end),
apvStatus5 = max(case when t.groupId = 5 then t.apvStatus end)
from #TEMPBULKAPPROVAL t
group by t.requestId
注:max
也是一个聚合函数
你可以用这样的东西来完成:
SELECT
requestId,
approvalDate_1 = MAX(approvalDate_1),
approvalDate_2 = MAX(approvalDate_2),
approvalDate_3 = MAX(approvalDate_3),
approvalDate_4 = MAX(approvalDate_4),
approvalDate_5 = MAX(approvalDate_5),
projMan_1 = MAX(projMan_1),
projMan_2 = MAX(projMan_2),
projMan_3 = MAX(projMan_3),
projMan_4 = MAX(projMan_4),
projMan_5 = MAX(projMan_5)
FROM
(
SELECT
requestId,
groupId,
approvalDate,
projMan,
'approvalDate_' + CAST( groupId AS VARCHAR(2)) AS approvalDatePivot,
'projMan_' + CAST( groupId AS VARCHAR(2)) AS projManPivot
FROM
@tbl
) T
PIVOT (
MAX(approvalDate) FOR approvalDatePivot IN ([approvalDate_1],[approvalDate_2],[approvalDate_3],[approvalDate_4],[approvalDate_5])
) pvt_1
PIVOT (
MAX(projMan) FOR projManPivot IN ([projMan_1],[projMan_2],[projMan_3],[projMan_4],[projMan_5])
) pvt_2
GROUP BY requestId