DECLARE @CURRENTSCHOOL TABLE (STUDENT VARCHAR(8), COURSE VARCHAR(8), SCHOOL VARCHAR(2))
INSERT INTO @CURRENTSCHOOL VALUES ('10000000','MCR1010','11')
INSERT INTO @CURRENTSCHOOL VALUES ('12000000','MCR6080','11')
INSERT INTO @CURRENTSCHOOL VALUES ('13000000','MCR6090','15')
DECLARE @OTHERSCHOOLS TABLE (STUDENT VARCHAR(8), COURSE VARCHAR(8), SCHOOL VARCHAR(2))
INSERT INTO @OTHERSCHOOLS VALUES ('10000000','MCR1010','11')
INSERT INTO @OTHERSCHOOLS VALUES ('10000000','MCR1011','14')
INSERT INTO @OTHERSCHOOLS VALUES ('10000000','MCR1012','15')
INSERT INTO @OTHERSCHOOLS VALUES ('12000000','MCR6080','19')
INSERT INTO @OTHERSCHOOLS VALUES ('13000000','MCR6090','15')
对于上面的示例数据。两张 table 。当前学校和其他学校。
当前学校是学生所在的当前类(class),包括学校代码, 是主表。
OtherSchools 可能是学生可以在不同学校继续学习的其他类(class)。
我需要将当前学校表与使用学号匹配的其他学校表进行比较,并且对于其他学校的每个不同的学校代码,它需要返回一个计数。
例如:
Student: OtherSchoolCount:
10000000 2 (because of 2 different school codes than than the current school)
12000000 1 (because of 1 different school code than than the current school)
13000000 blank (because not a different school code)
这可能吗?
非常感谢
M.
最佳答案
SELECT cs.student,
COUNT(os.course)
FROM @CURRENTSCHOOL cs
LEFT JOIN @OTHERSCHOOLS os
ON cs.student = os.student
AND cs.school <> os.school
GROUP BY cs.student
输出
STUDENT
-------- -----------
10000000 2
12000000 1
13000000 0
如果 Null 确实优于 Zero,那么您可以这样做(或使用等效的 CTE)
SELECT student,
CASE
WHEN coursecount = 0 THEN NULL
ELSE coursecount
END coursecount
FROM (SELECT cs.student,
COUNT(os.course) coursecount
FROM @CURRENTSCHOOL cs
LEFT JOIN @OTHERSCHOOLS os
ON cs.student = os.student
AND cs.school <> os.school
GROUP BY cs.student) t
哪些输出
student courseCount
-------- -----------
10000000 2
12000000 1
13000000 NULL
更新:NullIF 可以用作 Case 语句的替代品,参见 What applications are there for NULLIF()?
关于sql-server - SQL Server 2005 - 如何比较字段值,如果不同则返回计数,每次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6190723/