【发布时间】:2016-02-19 07:42:44
【问题描述】:
**这是针对 SQL2010 的
试图找出有多少学生参加了每个 PGM(即程序)
需要生成一个包含 5 列的报告
- 程序名称
- 节目计数
- 节目排名
- 学生人数
- 学生排名
结果
PGM/节目 COUNT 没问题。
PGM排名也是如此
但学生人数和学生排名为 1。
他们每个人都是“1”。 :(
我想我需要在 SELECT 中进行 SELECT(或者我不太了解 SQL)
SELECT TOP 100
T.PGM AS Program,
COUNT(*) AS ProgramCount,
RANK() OVER (ORDER BY COUNT(*) DESC) as ProgramRanking,
T.SID AS 'StudentID',
COUNT(DISTINCT 'StudentID') AS ProgramCount,
RANK() OVER (ORDER BY COUNT(DISTINCT 'StudentID') DESC) as StudentRanking
FROM StudentPrograms T
WHERE T.PGM <>'unknown' AND
T.CreateDate > '2015-10-01' AND
T.CreateDate < '2015-11-01' -- We do LIKE Halloween :)
GROUP BY T.PGM
ORDER BY COUNT(*) DESC;
再次感谢您
【问题讨论】:
-
你能分享表格中的列吗,也请分享几个示例行。
-
从您的查询中删除这一行“T.SID AS 'StudentID'”,然后依靠 t.sid 而不是 'StudentID'
-
谢谢我试过 t.SID 而不是 StudentID,这就是我得到的
-
Program=ENG101, PGMCount=1629, ProgramRanking=1, StudentCount=1, Student Rank=1
-
BIO101、CHEM102 等也是如此……我得到了正确的 PGM 计数,但没有得到参加课程的学生的计数。请注意,我的原始问题中有一个可变错字,但我在我的真实 SQL 中修复了它。再次感谢您(我不确定为什么我不能在此编辑器中使用回车:()。再次感谢
标签: sql sql-server select count rank