如何在SQL中显示计数值,而不是列出许多行?
我有三张表:考试、目标和考试如何在SQL中显示计数值,而不是列出许多行?,sql,sql-server,Sql,Sql Server,我有三张表:考试、目标和考试 考试可以有零个或多个目标 一次考试可以有零次或多次考试 我创建此SQL以报告数据: SELECT name, objectiveId, TestId FROM exam LEFT JOIN Test ON Test.ExamId = Exam.ExamId LEFT JOIN Objective ON Objective.ExamId = Exam.ExamId 我想做的是,不再显示objectiveId和TestId,而是 我想数一数每次考试有多少个目标或测
- 考试可以有零个或多个目标
- 一次考试可以有零次或多次考试
SELECT name, objectiveId, TestId
FROM exam
LEFT JOIN Test ON Test.ExamId = Exam.ExamId
LEFT JOIN Objective ON Objective.ExamId = Exam.ExamId
我想做的是,不再显示objectiveId和TestId,而是
我想数一数每次考试有多少个目标或测试。某物
比如:
您可以使用:
SELECT name Exam, COALESCE(COUNT(objectiveId), 0) Objectives, COALESCE(COUNT(TestId), 0) Tests
FROM exam
LEFT JOIN Test ON Test.ExamId = Exam.ExamId
LEFT JOIN Objective ON Objective.ExamId = Exam.ExamId
GROUP BY name;
我不知道您是否尝试过使用
COUNT
函数?但是,如果您使用COUNT()函数,则需要在testID上提供一个group by。是否需要合并?@Tim,如果没有目标,则结果为NULL。COALESCE映射NULL->0要精确(且挑剔):COALESCE
将NULL映射到您所声明的任何内容COALESCE(A,B,C,D…)
将返回A,B,C,D
的第一个非空值。我正在努力找到一种让count返回null的方法。如果没有目标,它应该返回零。
SELECT name Exam, COALESCE(COUNT(objectiveId), 0) Objectives, COALESCE(COUNT(TestId), 0) Tests
FROM exam
LEFT JOIN Test ON Test.ExamId = Exam.ExamId
LEFT JOIN Objective ON Objective.ExamId = Exam.ExamId
GROUP BY name;