微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 2005-如何比较字段值,并在每次出现时返回计数如果不同

如何解决SQL Server 2005-如何比较字段值,并在每次出现时返回计数如果不同

||
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),SCHOOL VARCHAR(2))
INSERT INTO @OTHERSCHOOLS VALUES (\'10000000\',\'11\')
INSERT INTO @OTHERSCHOOLS VALUES (\'10000000\',\'MCR1011\',\'14\')
INSERT INTO @OTHERSCHOOLS VALUES (\'10000000\',\'MCR1012\',\'15\')
INSERT INTO @OTHERSCHOOLS VALUES (\'12000000\',\'19\')
INSERT INTO @OTHERSCHOOLS VALUES (\'13000000\',\'15\')
对于以上示例数据。两张桌子。当前学校和其他学校。 当前学校是学生正在学习的当前课程,包括学校代码, 并且是主表。 其他学校可能是学生可以在其他学校继续学习的其他课程。 我需要将当前学校表与使用学生ID编号匹配的其他学校表进行比较,并且对于其他学校中的每个不同学校代码,都需要返回一个计数。 例如:
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比零更可取,那么您可以执行此操作(或使用等效的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语句的替代方法,请参阅NULLIF()有哪些应用程序?     ,        
select o.Student,count(*) as Count
from CURRENTSCHOOL c1 
inner join OTHERSCHOOLS o on c1.Student = o.Student --this join is to ensure student exists in both tables 
left outer join CURRENTSCHOOL c on o.Student = c.Student
    and o.School= c.School
where c.Student is null
group by o.Student
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?