sql-server - SQL Server 2005 - 如何比较字段值,如果不同则返回计数,每次出现

标签 sql-server tsql count

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/

相关文章:

node.js - MongoDB 订单/销售聚合组每月总和 + 计数字段

java - 在 Mule CE 3.5 (Anypoint) 中执行 MSSQL 存储过程

sql - 获取每月第二个星期二的日期

c# - 将 sql (row_number 和 DENSE_RANK) 转换为 linq

sql-server - 在 SQL Server 中将包含空 (0x00) 字符的二进制数据转换为 ASCII

sql - SQL Server 2008 中的累积添加

Django 模板过滤器 : counting objects

c# - redis c# 客户端,我如何获得订阅者计数?

c# - 调用存储过程或运行sql查询?

sql - 如何终止或回滚事件事务?