Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中显示计数值,而不是列出许多行?_Sql_Sql Server - Fatal编程技术网

如何在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,而是 我想数一数每次考试有多少个目标或测

我有三张表:考试、目标和考试

  • 考试可以有零个或多个目标
  • 一次考试可以有零次或多次考试
我创建此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 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;