将所有行作为列sql 2012的总和

时间:2017-05-31 18:47:13

标签: sql sql-server tsql sql-server-2012

我希望得到“总测试”“失败”和“通过”列的结果的总和。我通常会在SSRS中处理这些聚合,但我目前没有这个选项。

我当前的查询:

select s.school_code, s.name, count(cd.Test_ID) as [Tested],
 sum(case when cd.result = 'fail' then 1 Else 0 End) as 'Failed'
 ,sum(case when cd.result = 'pass' then 1 Else 0 End) as 'Passed'

FROM 
 [psi_db_8amSnapshot].[dbo].[Candidate_Data] cd
  join [psi_db_8amSnapshot].[dbo].account_school s on s.school_id = cd.school_id
  where s.School_code in 
  (
  '1001', 
'1002',
'1003' ,
'1004' ,
'1005' ,
'1006' ,
'1007' ,
'1008' ,
'1016' ,
'1009' ,
'1010' ,
'1012' ,
'1013' ,
'1014' ,
'1015'
)

and cd.[date] between '01-01-2016' and '05-01-2017' and cd.TestName = 'MN Dental Assistant State Licensure Examination'
group by s.school_code, s.name, test_id

我希望在我的三个聚合列中得到所有值的总和。所以测试的总和,应该= 640,传递的总和= 327,失败的总和= 313。

3 个答案:

答案 0 :(得分:1)

我可能会使用声明:

with NumberOfFailedResults as
(
    Select count(cd.result) as NumberOfFailedResults from [psi_db_8amSnapshot].[dbo].[Candidate_Data] as cd where cd.Result = 'Failed'
),
NumberOfPassedResults as
(
    Select count(cd.result) as NumberOfPassedResults from [psi_db_8amSnapshot].[dbo].[Candidate_Data] as cd where cd.Result = 'Passed'
)

Select NumberOfFailedResults, NumberOfPassedResults, ...

答案 1 :(得分:1)

我认为你正在寻找分组如下组:

只需按以下方式更换您的论坛:

group by grouping sets ((s.school_code), (s.name), (test_id))

答案 2 :(得分:0)

这应该适合你。

select Q.school_code, Q.name, SUM(Q.Tested), SUM(Q.Failed), SUM(Q.Passed) from  (   
select s.school_code, s.name, count(cd.Test_ID) as [Tested],
 sum(case when cd.result = 'fail' then 1 Else 0 End) as 'Failed'
 ,sum(case when cd.result = 'pass' then 1 Else 0 End) as 'Passed'

FROM 
 [psi_db_8amSnapshot].[dbo].[Candidate_Data] cd
  join [psi_db_8amSnapshot].[dbo].account_school s on s.school_id = cd.school_id
  where s.School_code in 
  (
  '1001', 
'1002',
'1003' ,
'1004' ,
'1005' ,
'1006' ,
'1007' ,
'1008' ,
'1016' ,
'1009' ,
'1010' ,
'1012' ,
'1013' ,
'1014' ,
'1015'
)

and cd.[date] between '01-01-2016' and '05-01-2017' and cd.TestName = 'MN Dental Assistant State Licensure Examination'
group by s.school_code, s.name, test_id)Q
GROUP BY Q.School_Code, Q.Name