我有一个用列
的表格阅读 [code]|[Test Mk]
----- -----
1231 | 22.5
1223 | 13.5
1231 | 24.25
1232 | 25.0
.... ....
当我像这样查询时
select [code], COUNT([code]) as Total
from reading
group by [code]
显示此结果
code |Total
---- ----
1237 |728
1233 |698
1232 |701
1236 |651
1231 |655
1235 |626
1234 |636
1238 |685
当我像这样查询时再次
select [code], COUNT([code]) as FAIL
from Reading
where ROUND([Test Mk],0) < 24
group by [code]
结果
code | FAIL
---- | ----
1237 | 617
1233 | 422
1232 | 60
1236 | 81
1231 | 271
1235 | 517
1234 | 149
1238 | 69
当我像这样查询时再次
select [code], COUNT([code]) as PASS
from Reading
where ROUND([Test Mk],0) >= 24
group by [code]
结果
code | PASS
---- | ----
1237 | 111
1233 | 276
1232 | 641
1236 | 570
1231 | 384
1235 | 109
1234 | 487
1238 | 616
我想要一个以这种格式生成结果的查询
[code] | [Total] | [PASS] | [FAIL]
---- ---- ---- ----
1231 | 125 | 100 | 25
1232 | 200 | 150 | 50
我该怎么做
答案 0 :(得分:1)
您需要使用Conditional Aggregation
要获得PASS
计数,只需在ROUND([Test Mk],0) >= 24
时计算行数。这可以这样实现。
Count(Case when ROUND([Test Mk],0) >= 24 then 1 END)
要获得FAIL
计数,只需在ROUND([Test Mk],0) < 24
时计算行数。这可以这样实现。
Count(Case when ROUND([Test Mk],0) < 24 then 1 END)
仅当行满足条件时, Case
语句才会生成1
,否则它将放置NULL
。 Count count会在计数时跳过NULL
值
整体查询
select [code],
COUNT([code]) as Total,
Count(Case when ROUND([Test Mk],0) >= 24 then 1 END) as PASS,
Count(Case when ROUND([Test Mk],0) < 24 then 1 END) as FAIL
from reading
group by [code]
答案 1 :(得分:0)
SUM的另一种方式:
SELECT [code],
COUNT([code]) as [Total],
SUM(CASE WHEN ROUND([Test Mk],0) >= 24 THEN 1 ELSE 0 END) as [PASS],
SUM(CASE WHEN ROUND([Test Mk],0) < 24 THEN 1 ELSE 0 END) as [FAIL]
FROM reading
GROUP BY [code]
还有一个(奇怪的):
;WITH [code] As(
select [code], COUNT([code]) as Total
from reading
group by [code]
), [fails] AS (
select [code], COUNT([code]) as [FAIL]
from Reading
where ROUND([Test Mk],0) < 24
group by [code]
), [passed] AS (
select [code], COUNT([code]) as [PASS ]
from Reading
where ROUND([Test Mk],0) >= 24
group by [code]
)
SELECT c.[code],
c.[Total],
f.[FAIL],
p.[PASS]
FROM [code] c
LEFT JOIN [fails] f
ON c.[code] = f.[code]
LEFT JOIN [passed] p
ON c.[code] = p.[code]