Первый запрос выполняет SELECT с WHERE, чтобы вернуть только строки, которые имеют соответствующий вердикт, а затем подсчитывает эти строки. Второй запрос подсчитывает все строки каждый раз.
Вы можете попробовать:
select
dbresultsid, TestCase, BuildID, Analyzed, Verdict,
Sum(case when Verdict='PASS' then 1 else 0 end) as PASS,
Sum(case when Verdict='FAIL' then 1 else 0 end) as FAIL,
Sum(case when Verdict='INCONC' then 1 else 0 end) as INCONC,
Sum(case when Verdict='TIMEOUT' then 1 else 0 end) as TIMEOUT
from
results
where
BuildID = 'Beta1'
group by
TestCase, dbresultsid
order by
Analyzed
Данные испытаний:
CREATE TABLE #Test (BuildID Integer, Verdict char(7))
INSERT INTO #TEST (Buildid, Verdict)
VALUES (1, 'PASS')
INSERT INTO #TEST (Buildid, Verdict)
VALUES (1, 'PASS')
INSERT INTO #TEST (BuildID, Verdict)
VALUES (2, 'FAIL')
INSERT INTO #TEST (BuildID, Verdict)
VALUES (3, 'INCONC')
INSERT INTO #TEST (BuildID, Verdict)
VALUES(4, 'TIMEOUT')
Запрос:
select buildid,
sum(case verdict when 'PASS' then 1 else 0 end) as Pass,
sum(case verdict when 'FAIL' then 1 else 0 end) as Fail,
sum(case verdict when 'INCONC' then 1 else 0 end) as Inconc,
sum(case verdict when 'TIMEOUT' then 1 else 0 end) as TimeOut
FROM #temp
group by buildid
Выход:
Item buildid PASS Fail Inconc TimeOut
1 1 2 0 0 0
2 2 0 1 0 0
3 3 0 0 1 0
4 4 0 0 0 1