2009-08-29 4 views
0

職場のさまざまな部門で何回調査が行われたのかを確認したいと思います。 これは、「グループ化」を使用して一致数を数えることで、かなり簡単です。がSQLで一致するようにしました

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

ただし、これは調査を完了した部門のみを示しています。結果リストに表示されたアンケートを完了していない部門をゼロカウントとしてどのようにしたらよいでしょうか?

更新:

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 

答えて

2

INNER JOINをLEFT JOINに変更し、COUNT()を変更してSURVEYSのみを参照するようにしてください。おそらくその時と同じように動作します。

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

おかげで示し"LEFT JOIN" – Brad

+2

あなたの結果をもう一度もう一度チェックしてください。フルアウトジョインの目的は、あなたの後ろのものとは異なります –

3

LEFT JOININNER JOINを交換してください。関連するアンケートがなくても、すべての部門を選択します。

+0

おかげ - あなたが示唆したように、私はただの「FULL OUTER JOINを」INSEADに入れるまではexacly動作しませんでした - これはまだ唯一の調査表に完成調査を持っている部門 – 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 

LEFT上の変更は、(調査を*。)JOINとカウント

4

あなたは代わりに "内部結合" の "外部結合左" 必要がある - という意志を結果として、「調査」に対応するすべての列がヌルとして生成されます。ここでは、結合条件に一致するものはありません。

"count(Surveys.DepartmentID)"または "sum(surveys.departmentIDがnullでない場合は1 else else end)"というように、このような行を数えることを避ける必要があります。

関連する問題