Множественный выбор из CTE с различным количеством строк в StoredProcedure - PullRequest
0 голосов
/ 11 апреля 2019

Как сделать два выбора с объединениями из cte, которые возвращают общее количество столбцов в двух выборках?

Я попытался выполнить объединение, но это добавляет к тому же списку, и нет возможности дифференцировать для дальнейшегоиспользовать.

WITH campus AS
(SELECT DISTINCT CampusName, DistrictName
FROM            dbo.file
),creditAcceptance AS
(SELECT        CampusName, EligibilityStatusFinal, CollegeCreditAcceptedFinal, COUNT(id) AS N
FROM            dbo.file
WHERE        (EligibilityStatusFinal LIKE 'Eligible%') AND (CollegeCreditEarnedFinal = 'Yes') AND (CollegeCreditAcceptedFinal = 'Yes')
GROUP BY CampusName, EligibilityStatusFinal, CollegeCreditAcceptedFinal
),eligibility AS
(SELECT        CampusName, EligibilityStatusFinal, COUNT(id) AS N, CollegeCreditAcceptedFinal
FROM            dbo.file
WHERE        (EligibilityStatusFinal LIKE 'Eligible%') 
GROUP BY CampusName, EligibilityStatusFinal, CollegeCreditAcceptedFinal
)
SELECT        a.CampusName, c.[EligibilityStatusFinal], SUM(c.N) AS creditacceptCount
FROM            campus  as a FULL OUTER JOIN creditAcceptance as c ON a.CampusName=c.CampusName
WHERE        (a.DistrictName = 'xy')
group by a.CampusName ,c.EligibilityStatusFinal
Union ALL
SELECT      a.CampusName ,  b.[EligibilityStatusFinal], SUM(b.N) AS eligible
    From Campus as a FULL OUTER JOIN eligibility    as b ON a.CampusName = b.CampusName

WHERE        (a.DistrictName = 'xy') 
group by a.CampusName,b.EligibilityStatusFinal

Ожидаемый результат:

+------------+------------------------+--------------------+
| CampusName | EligibilityStatusFinal | creditacceptCount  |
+------------+------------------------+--------------------+
| M          | G                      | 1                  |
| E          | NULL                   | NULL               |
| A          | G                      | 4                  |
| B          | G                      | 8                  |
+------------+------------------------+--------------------+

+------------+------------------------+----------+
| CampusName | EligibilityStatusFinal | eligible |
+------------+------------------------+----------+
| A          | G                      |        8 |
| C          | G                      |        9 |
| A          | T                      |        9 |
+------------+------------------------+----------+

1 Ответ

0 голосов
/ 24 апреля 2019

Как вы можете видеть здесь CTE можно использовать только в одном выражении, поэтому вы не можете получить ожидаемый результат с помощью CTE.

Вот выдержка из документации Microsoft:

За CTE должен следовать одиночный SELECT, INSERT, UPDATE или DELETE. оператор, который ссылается на некоторые или все столбцы CTE. CTE также может быть указан в операторе CREATE VIEW как часть определяющего SELECT изложение взгляда.

Вместо этого вы можете использовать табличные переменные (declare @campus table(...)) или временные таблицы (create table #campus (...)).

...