Sql 中的PIVOT函数返回所有零
我有一张如下表:Sql 中的PIVOT函数返回所有零,sql,sql-server,tsql,count,pivot,Sql,Sql Server,Tsql,Count,Pivot,我有一张如下表: TestCaseID | currentResultVerdict 1 Passed 2 Failed 3 Blocked 4 Blocked 5 Inprogress 6 Passed 7 Passed se
TestCaseID | currentResultVerdict
1 Passed
2 Failed
3 Blocked
4 Blocked
5 Inprogress
6 Passed
7 Passed
select *
from
(select TestCaseID, currentResultVerdict from R_4_TestCases) As SourceTable
PIVOT
(
count(TestCaseID)
for currentResultVerdict in (['Passed'],['Failed'],['Blocked'],['Inprogress'])
) As PivotTabe
我想产生如下结果:
Passed | Failed | Blocked | Inprogress
3 1 2 1
我使用了PIVOT
查询,如下所示:
TestCaseID | currentResultVerdict
1 Passed
2 Failed
3 Blocked
4 Blocked
5 Inprogress
6 Passed
7 Passed
select *
from
(select TestCaseID, currentResultVerdict from R_4_TestCases) As SourceTable
PIVOT
(
count(TestCaseID)
for currentResultVerdict in (['Passed'],['Failed'],['Blocked'],['Inprogress'])
) As PivotTabe
我的输出是:
'Passed' | 'Failed' | 'Blocked' | 'Inprogress'
0 0 0 0
为什么我得到零
为了便于阅读,我没有在我的表中包括其他列作为
pivot
的替代方法。您可以通过条件聚合获得相同的结果:
declare @tmp table (TestCaseID int, currentResultVerdict varchar(50))
insert into @tmp
values
(1, 'Passed')
,(2, 'Failed')
,(3, 'Blocked')
,(4, 'Blocked')
,(5, 'Inprogress')
,(6, 'Passed')
,(7, 'Passed')
select
sum (case when currentResultVerdict='Passed' then 1 else 0 end) as Passed
,sum (case when currentResultVerdict='Failed' then 1 else 0 end) as Failed
,sum (case when currentResultVerdict='Blocked' then 1 else 0 end) as Blocked
,sum (case when currentResultVerdict='Inprogress' then 1 else 0 end) as Inprogress
from @tmp
结果:
作为
pivot
的替代方案,您可以通过条件聚合实现相同的结果:
declare @tmp table (TestCaseID int, currentResultVerdict varchar(50))
insert into @tmp
values
(1, 'Passed')
,(2, 'Failed')
,(3, 'Blocked')
,(4, 'Blocked')
,(5, 'Inprogress')
,(6, 'Passed')
,(7, 'Passed')
select
sum (case when currentResultVerdict='Passed' then 1 else 0 end) as Passed
,sum (case when currentResultVerdict='Failed' then 1 else 0 end) as Failed
,sum (case when currentResultVerdict='Blocked' then 1 else 0 end) as Blocked
,sum (case when currentResultVerdict='Inprogress' then 1 else 0 end) as Inprogress
from @tmp
结果:
方括号内不应包含单引号。应该是这样的<代码>['Passed']将匹配以单个字符开头和结尾的字符串quote@MartinSmith就这样!。谢谢你的帮助。删除单引号将返回所需结果。不应将单引号包含在方括号内。应该是这样的<代码>['Passed']将匹配以单个字符开头和结尾的字符串quote@MartinSmith就这样!。谢谢你的帮助。删除单引号现在会返回所需的结果。