我有以下TypeID
表。此表具有不同的StatusID
s。每种类型最多可以有4 TypeID
s(或更少,例如。StatusID
3只有3 ---------------------------------------------------------------
TypeID Type StatusID StatusName RecordCount
---------------------------------------------------------------
1 Type_1 1 Pending 3
1 Type_1 2 In Process 2
1 Type_1 3 Completed 1
1 Type_1 4 Invalid 1
2 Type_2 1 Pending 4
2 Type_2 2 In Process 5
2 Type_2 3 Completed 6
2 Type_2 4 Invalid 1
3 Type_3 1 Pending 1
3 Type_3 2 In Process 1
3 Type_3 3 Completed 1
s。
RecordCount显示没有。特定StatusID的记录。 (例如,Type_1的3个等待记录)
--------------------------------------------------------------------------------
Type Type Status Pending Status InProcess Status Completed Status Invalid ID ID Count ID Count ID Count ID Count
for for for for
Pending InProcess Completed Invalid
--------------------------------------------------------------------------------
1 Type_1 1 3 2 2 3 1 4 1
2 Type_2 1 4 2 5 3 6 4 1
3 Type_3 1 1 2 1 3 1 4 0
我想要结果如下表所示:
根据每种类型,我想根据StatusID的状态显示RecordCount。
SELECT *
FROM (
SELECT
TypeID,Type,StatusName,RecordCount
FROM #TypeStatusDetails
) as s
PIVOT
(
SUM(RecordCount)
FOR StatusName IN ([Pending],[In Process],[Completed],[Invalid])
)AS pvt
我使用了以下查询
<meta>
但是我很难根据每个StatusName获取StatusId列以将其组合在pivot中。
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
您可以使用条件聚合而不是PIVOT
来执行此操作:
SELECT TypeID, Type,
MAX(CASE WHEN StatusName = 'Pending' THEN StatusID END) AS [Status for Pending],
SUM(CASE WHEN StatusName = 'Pending' THEN RecordCount ELSE 0 END) AS [Pending],
MAX(CASE WHEN StatusName = 'In Process' THEN StatusID END) AS [Status for In Process],
SUM(CASE WHEN StatusName = 'In Process' THEN RecordCount ELSE 0 END) AS [In Process],
MAX(CASE WHEN StatusName = 'Completed' THEN StatusID END) AS [Status for Completed],
SUM(CASE WHEN StatusName = 'Completed' THEN RecordCount ELSE 0 END) AS [Completed],
MAX(CASE WHEN StatusName = 'Invalid' THEN StatusID END) AS [Status for Invalid],
SUM(CASE WHEN StatusName = 'Invalid' THEN RecordCount ELSE 0 END) AS [Invalid]
FROM TypeStatusDetails
GROUP BY TypeID, Type
以上查询是标准ANSI SQL,可以在任何RDMBS中使用。
答案 1 :(得分:0)
SELECT TypeID,Type,
合并(MAX(CASN WHEN StatusName ='Pending'THEN StatusID END),0)AS [待处理状态],
SUM(StatusName ='Pending'THEN RecordCount ELSE 0 END)的情况AS [Pending],
Coalesce(MAX(CASE WHEN StatusName ='In Process'THEN StatusID END),0)AS [进行中的状态],
SUM(StatusName ='In Process'THEN RecordCount ELSE 0 END)AS [正在处理],
合并(MAX(CASN WHEN StatusName ='已完成'THEN StatusID END),0)AS [已完成状态],
SUM(StatusName ='Completed'THEN RecordCount ELSE 0 END)的情况AS [已完成],
合并(MAX(CASN WHEN StatusName ='无效'THEN StatusID END),0)AS [无效状态],
SUM(当StatusName ='无效'时记录计数ELSE 0结束时的情况)AS [无效]
FROM TypeStatusDetails
GROUP BY TypeID,Type