我在一個表中得到了一些資料,如下所示。我正在嘗試運行一個查詢,該查詢將在每個 requestId 的一行中獲取我的資料。我不需要日期或拒絕原因,只需要每個 groupId 的 eprojman 和 apvStatus
requestId - projMan1 - apvStatus1 - projMan2 - apvStatus2 - projMan3 - apvStatus3 等等。對于所有 5 個 groupIds
| 請求標識 | 組ID | 入境日期 | 批準日期 | 狀態 | 專案人 | 拒絕理由 |
|---|---|---|---|---|---|---|
| 1 | 1 | 2020-11-02 | 2019-07-25 | 得到正式認可的 | rx1942 | 空值 |
| 1 | 2 | 2020-11-02 | 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 | 空值 | 不批準 | 空值 | 6 |
| 2 | 2 | 2020-11-02 | 空值 | 待辦的 | ma2674 | 空值 |
| 2 | 3 | 2020-11-02 | 空值 | 待辦的 | CB9097 | 空值 |
| 2 | 4 | 2020-11-02 | 空值 | 待辦的 | bj1763 | 空值 |
| 2 | 5 | 2020-11-02 | 空值 | 待辦的 | tr5972 | 空值 |
我一直在嘗試使用 PIVOT 表,但我發現的所有示例都涉及匯總資料或其他內容。我只是很想取 5 行并將其變成 1 為每個 requestID
我唯一能想到的是從同一個表中為每個 groupID 選擇 5 次并將其合并,但這比見鬼的要慢。必須有更好的方式
謝謝。
當前查詢:
select group1.requestId
, group1.apvStatus as apvStatus1
, group1.projMan as projMan1
, group2.apvStatus as apvStatus2
, group2.projMan as projMan2
, group3.apvStatus as apvStatus3
, group3.projMan as projMan3
,group4.apvStatus as apvStatus4
, group4.projMan as projMan4
,group5.apvStatus as apvStatus5
, group5.projMan as projMan5
,group1.denialReason
INTO #TEMPBAOrganized
from (
select requestId, apvStatus, projMan, denialReason from #TEMPBULKAPPROVAL where groupId = 1) group1
INNER JOIN
(select requestId, apvStatus, projMan, denialReason from #TEMPBULKAPPROVAL where groupId = 2) group2
on group1.requestId = group2.requestId
INNER JOIN
(select requestId, apvStatus, projMan from #TEMPBULKAPPROVAL where groupId = 3) group3
on group1.requestId = group3.requestId
INNER JOIN
(select requestId, apvStatus, projMan from #TEMPBULKAPPROVAL where groupId = 4) group4
on group1.requestId = group4.requestId
INNER JOIN
(select requestId, apvStatus, projMan from #TEMPBULKAPPROVAL where groupId = 5) group5
on group1.requestId = group5.requestId
uj5u.com熱心網友回復:
對于多列的旋轉,使用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也是一個聚合函式
uj5u.com熱心網友回復:
你可以這樣做:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374182.html
標籤:sql sql-server 查询语句
