2009-08-29 10 views
0

Je voudrais savoir combien de sondages ont été effectués par différents départements au travail. C'est assez facile à faire en utilisant "Grouper par" et en comptant le nombre de correspondances.compter les correspondances en sql

SELECT  Departments.DepartmentName, count(*) as [survey count] 
FROM   Departments INNER JOIN 
        Surveys ON Departments.DepartmentID = Surveys.DepartmentID 
GROUP BY Departments.DepartmentName 

mais cela ne montre que les ministères qui ont répondu à des sondages. Comment aurais-je les ministères qui n'ont pas rempli les sondages représentés sur la liste des résultats comme un compte zéro?

Mise à jour:

SELECT  Departments.DepartmentName AS Department, 
     COUNT(Surveys.DepartmentID) AS  [survey count] 
     , Departments.DepartmentID 
     FROM   Surveys FULL OUTER JOIN 
        Departments ON Surveys.DepartmentID = Departments.DepartmentID 
    GROUP BY Departments.DepartmentName, Departments.DepartmentID 

Répondre

2

Changez simplement votre INNER JOIN en un LEFT JOIN et changez le COUNT() pour ne référencer que les SURVEYS. Cela fonctionnera probablement comme c'est le cas à l'époque.

SELECT  Departments.DepartmentName, 
      count(Surveys.DepartmentID) as [survey count] 
FROM   Departments LEFT JOIN 
       Surveys ON Departments.DepartmentID = Surveys.DepartmentID 
GROUP BY Departments.DepartmentName 
+0

Merci - ça n'a pas exacly comme vous le suggérez jusqu'à ce que je mets dans le INSEAD « FULL OUTER JOIN » du juste the "LEFT JOIN" – Brad

+2

Revérifiez à nouveau votre résultat. Le but de FULL OUTER JOIN est différent de ce que vous recherchez –

3

Remplacer INNER JOIN avec LEFT JOIN. Il sélectionnera tous les départements, même s'il n'y a pas d'enquête associée.

+0

grâce - cela montre encore que les ministères qui ont ont une enquête réalisée dans le tableau des enquêtes – Brad

1
SELECT Departments.DepartmentName, count(Surveys.DepartmentID) as [survey count] 
FROM Departments 
LEFT OUTER JOIN Surveys 
ON Departments.DepartmentID = Surveys.DepartmentID 
GROUP BY Departments.DepartmentName 
1
SELECT  Departments.DepartmentName, count(Surveys.*) as [survey count] 
FROM  Departments 
LEFT JOIN Surveys ON Departments.DepartmentID = Surveys.DepartmentID 
GROUP BY Departments.DepartmentName 

Notez le changement sur la GAUCHE JOIN et compter (enquêtes *.)

4

Vous avez besoin d'une "jointure externe gauche" au lieu d'une "jointure" - qui sera produire des lignes dans la sortie avec toutes les colonnes correspondant à "enquêtes" comme nul où il n'y avait pas de correspondance pour la condition de jointure. Vous aurez besoin de mettre à jour votre requête à "count (Surveys.DepartmentID)" ou "sum (cas où surveys.departmentID n'est pas null puis 1 sinon 0 fin)" pour éviter de compter de telles lignes comme une seule soumission.

Questions connexes