Yve*_*ves 1 sql pivot-without-aggregate
这是我的查询
CREATE view pivmehis WITH ENCRYPTION
as
SELECT APPROVED, [Not Approved] as REJECT, NULL
FROM
(SELECT MgtApproval
from LeaveRequest) l
PIVOT
(
Sum (SchedId) --I DON'T WANT TO SUM THIS COLUMN
FOR MgtApproval IN
([APPROVED], [REJECT], [NULL])) as pvt
Run Code Online (Sandbox Code Playgroud)
原始表结果:
MgtApproval SchedId
Approved 1
Reject 2
Null 3
Approved 4
Reject 5
Null 6
Run Code Online (Sandbox Code Playgroud)
这是我想要查看的结果:
Approved Reject Null
1 2 3
4 5 6
Run Code Online (Sandbox Code Playgroud)
SELECT rn, APPROVED, [Not Approved] as REJECT, NULL
FROM (
SELECT MgtApproval, SchedID, ROW_NUMBER() OVER (PARTITION BY mgtapproval ORDER BY SchedID) AS rn
FROM LeaveRequest
) l
PIVOT
(
MIN(SchedId)
FOR MgtApproval IN
([APPROVED], [Not Approved], [NULL])
) as pvt
Run Code Online (Sandbox Code Playgroud)
一个PIVOT仍然需要任何聚合功能,但是这一次是保证最多一列汇总计算.
这是对样本数据的查询,它可以准确地返回您想要的内容:
WITH leaveRequest aS
(
SELECT 'APPROVED' AS mgtapproval, 1 AS SchedID
UNION ALL
SELECT 'Reject' AS mgtapproval, 2 AS SchedID
UNION ALL
SELECT 'NULL' AS mgtapproval, 3 AS SchedID
UNION ALL
SELECT 'APPROVED' AS mgtapproval, 4 AS SchedID
UNION ALL
SELECT 'Reject' AS mgtapproval, 5 AS SchedID
UNION ALL
SELECT 'NULL' AS mgtapproval, 6 AS SchedID
)
SELECT APPROVED, REJECT, [NULL]
FROM (
SELECT MgtApproval, SchedID, ROW_NUMBER() OVER (PARTITION BY mgtapproval ORDER BY SchedID) AS rn
FROM LeaveRequest
) l
PIVOT
(
MIN(SchedId)
FOR MgtApproval IN
([APPROVED], [Reject], [Null])
) as pvt
Run Code Online (Sandbox Code Playgroud)
更新:
由于您提到您的列实际上是a bit,因此您应该使用以下语法:
SELECT [1] AS approved, [0] AS reject, [-1] AS nil
FROM (
SELECT COALESCE(MgtApproval, -1) AS MgtApproval, SchedID, ROW_NUMBER() OVER (PARTITION BY mgtapproval ORDER BY SchedID) AS rn
FROM LeaveRequest
) l
PIVOT
(
MIN(SchedId)
FOR MgtApproval IN
([1], [0], [-1])
) as pvt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3951 次 |
| 最近记录: |