SQL Server 2005 – comment comparer la valeur du champ et renvoyer un nombre si différent, pour chaque occurrence

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') 

Pour les exemples de données ci-dessus. Deux tables. Currentschool et Otherschools.

Currentschool est le cours actuel sur lequel un étudiant est sur y compris le code de l'école, et est la table principale.

OtherSchools est potentiellement d'autres cours qu'un étudiant peut poursuivre, dans différentes écoles.

J'ai besoin de comparer la table de currentschool contre la table otherschools appariée en utilisant le numéro d'identification de l'étudiant, et pour chaque code d'école différent dans d'autres écoles, il doit returnner un nombre.

par exemple:

 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) 

Est-ce possible?

Merci beaucoup

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 

les sorties

 STUDENT -------- ----------- 10000000 2 12000000 1 13000000 0 

Si Null est vraiment préféré à Zero alors vous pouvez le faire (ou utiliser le CTE équivalent)

 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 

Quelles sorties

 student courseCount -------- ----------- 10000000 2 12000000 1 13000000 NULL 

Mise à jour: NullIF pourrait être utilisé comme alternative à l'instruction Case voir Quelles applications sont là pour 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