[英]Should I use CTE, Subquery, Temp Table, or a different method?
我已经使用SQL几个月了,我在为这项特定任务确定一些事情时遇到了麻烦:
我所拥有的表格按照年级分列了每所学校,第二栏有每个年级的总入学率。 我正在努力为所有学校的所有入学学生提供以下所需的输出:
Grade Total Enrolled
K 7,871
1 8,321
2 8,087
3 8,164
4 8,237
5 8,055
谢谢您的帮助!
我使用子查询尝试了这一点,但它显示了表中所有记录的每行重复的总数,而不是一行总计。
子查询:
SELECT (SELECT SUM(Totalenrollment) FROM Dbo.['2013Cycle_1_Data']
WHERE Grade LIKE '%6%' AND Level = 'MS' ) AS Grade6
CTE代码:
WITH
TK AS ( SELECT SUM(Totalenrollment) AS Kindergarten FROM Dbo.['2013Cycle_1_Data'] WHERE Grade LIKE '%KIND%' AND Level = 'ES' )
, T1 AS ( SELECT SUM(Totalenrollment) AS Grade1 FROM Dbo.['2013Cycle_1_Data'] WHERE Grade LIKE '%1%' AND Level = 'ES' )
, T2 AS ( SELECT SUM(Totalenrollment) AS Grade2 FROM Dbo.['2013Cycle_1_Data'] WHERE Grade LIKE '%2%' AND Level = 'ES' )
, T3 AS ( SELECT SUM(Totalenrollment) AS Grade3 FROM Dbo.['2013Cycle_1_Data'] WHERE Grade LIKE '%3%' AND Level = 'ES' )
, T4 AS ( SELECT SUM(Totalenrollment) AS Grade4 FROM Dbo.['2013Cycle_1_Data'] WHERE Grade LIKE '%4%' AND Level = 'ES' )
, T5 AS ( SELECT SUM(Totalenrollment) AS Grade5 FROM Dbo.['2013Cycle_1_Data'] WHERE Grade LIKE '%5%' AND Level = 'ES' )
SELECT * FROM TK
UNION ALL
SELECT * FROM T1
UNION ALL
SELECT * FROM T2
UNION ALL
SELECT * FROM T3
UNION ALL
SELECT * FROM T4
UNION ALL
SELECT * FROM T5
只需使用CASE语句确定年级,然后按年级分组:
select
case
when Grade LIKE '%KIND%' AND Level = 'ES' then 'K'
when Grade LIKE '%1%' AND Level = 'ES' then '1'
else 'Other Grades'
end as GradeLevel,
sum(TotalEnrollment) as Enrolled
from
Dbo.['2013Cycle_1_Data']
group by
case
when Grade LIKE '%KIND%' AND Level = 'ES' then 'K'
when Grade LIKE '%1%' AND Level = 'ES' then '1'
else 'Other Grades'
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.