0

如何使用来自 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 |
+------------+------------------------+----------+
4

1 回答 1

0

正如您在此处看到的, CTE 只能在单个语句中使用,因此您无法使用 CTE 获得预期的输出。

以下是 Microsoft 文档的摘录:

CTE 后面必须跟一个引用部分或全部 CTE 列的 SELECT、INSERT、UPDATE 或 DELETE 语句。CTE 也可以在 CREATE VIEW 语句中指定为视图的定义 SELECT 语句的一部分。

您可以改用表变量 ( declare @campus table(...)) 或临时表 ( create table #campus (...))。

于 2019-04-24T09:32:00.267 回答