Я не уверен, почему вы думаете о CTE, вы можете сделать это в одном наборе:
SELECT
[Week],
COUNT([Week]) AS weekcount
, SUM(CASE WHEN result = 'pass' THEN 1 ELSE 0 END) AS passcount
, SUM(CASE WHEN result = 'fail' THEN 1 ELSE 0 END) AS failcount
, COUNT(*) AS TotalSum
FROM table1
GROUP BY [Week]
В SQL Server нельзя ссылаться на псевдоним из того же SELECT, например, passcount, weekcount..etc. Для этого вам потребуется обходной путь, например использование подзапроса, CTE, JOIN, CROSS APPLY или любого другого метода, который будет использоваться для этой цели.
Вот некоторые из распространенных методов:
Использование подзапроса :
SELECT
[Week]
, SUM(weekcount) weekcount
, SUM(passcount) passcount
, SUM(failcount) failcount
, SUM(passcount + failcount) AS TotalSum
FROM (
SELECT
[Week],
COUNT([Week]) AS weekcount
, SUM(CASE WHEN result = 'pass' THEN 1 ELSE 0 END) AS passcount
, SUM(CASE WHEN result = 'fail' THEN 1 ELSE 0 END) AS failcount
FROM table1
GROUP BY [Week]
) D
GROUP BY
[Week]
Использование CTE метод:
;WITH CTE AS (
SELECT
[Week],
COUNT([Week]) AS weekcount
, SUM(CASE WHEN result = 'pass' THEN 1 ELSE 0 END) AS passcount
, SUM(CASE WHEN result = 'fail' THEN 1 ELSE 0 END) AS failcount
FROM table1
GROUP BY [Week]
)
SELECT
[Week]
, SUM(weekcount) weekcount
, SUM(passcount) passcount
, SUM(failcount) failcount
, SUM(passcount + failcount) AS TotalSum
FROM CTE
GROUP BY
[Week]
Использование метода CROSS APPLY :
Обратитесь к ответу @Gordon Linoff (простой и прямой).
это самые простые методы, которые вы можете использовать в вашем случае. Вы также можете использовать PIVOT в вашем случае, но я не упомянул это для простоты.