0

プロジェクトの下にあるタスクの数を表示するこの Sql クエリがありますが、タスクが 0 のプロジェクトが表示されないという問題は、誰かが私を助けることができますか?

SELECT Projects.projectName AS [Project Name],
    COUNT(Projects_tasks.taskID) AS #tasks,
    Projects.projectID AS [Project ID]

FROM Projects

INNER JOIN Projects_tasks
ON Projects.projectID = Projects_tasks.projectID 

GROUP BY Projects.projectName,
    Projects_tasks.taskID,
    Projects.projectID
4

7 に答える 7

1

使用するLeft Join

SELECT     Projects.projectName AS [Project Name],
                  ISNULL(COUNT(Projects_tasks.taskID),0) AS #tasks, Projects.projectID AS [Project ID]

FROM       Projects LEFT JOIN
                  Projects_tasks ON Projects.projectID = Projects_tasks.projectID 

GROUP BY Projects.projectName,Projects.projectID

columnで数えているも削除しますgroup by

于 2012-08-22T14:14:03.117 に答える
1

LEFT 結合、ISNULL() を使用し、カウントしている列でグループ化しないでください。

SELECT     Projects.projectName AS [Project Name],
                  ISNULL(COUNT(Projects_tasks.taskID), 0) AS #tasks, Projects.projectID AS [Project ID]

FROM       Projects LEFT JOIN
                  Projects_tasks ON Projects.projectID = Projects_tasks.projectID 

GROUP BY Projects.projectName,Projects.projectID
于 2012-08-22T14:14:37.853 に答える
0

LEFT JOIN を使用して、タスクが 0 のプロジェクトも含まれるようにする必要があります。

SELECT     Projects.projectName AS [Project Name],
           ISNULL(COUNT(Projects_tasks.taskID),0) AS #tasks, Projects.projectID AS [Project ID]
FROM       Projects LEFT JOIN
                  Projects_tasks ON Projects.projectID = Projects_tasks.projectID 

GROUP BY Projects.projectName,Projects_tasks.taskID,Projects.projectID
于 2012-08-22T14:14:01.113 に答える
0

INNER JOIN を LEFT JOIN に変更してみてください

参加するタスクがないため、0 は表示されません。

于 2012-08-22T14:14:48.427 に答える
0

を使用しLEFT JOINます。また、値COALESCEを変換しnullます。列はNULLになる可能性があるためCOALESCE、関数内にある必要があります。COUNTProjects_tasks.taskID

SELECT Projects.projectName AS [Project Name],
       COUNT(COALESCE(Projects_tasks.taskID, 0)) AS #tasks,
       Projects.projectID AS [Project ID]
FROM   Projects
         LEFT JOIN Projects_tasks
            ON Projects.projectID = Projects_tasks.projectID 
GROUP BY Projects.projectName,
    Projects_tasks.taskID,
    Projects.projectID
于 2012-08-22T14:15:09.100 に答える
0

あなたのクエリがタスクの数として 1 つ以上のタスクを返すことはないと思います。Projects_tasks.taskID を group 句に含めないでください。そして、あなたの問題については、内部結合の代わりに LEFT JOIN を配置する必要があり、それは機能します。

SELECT Projects.projectName AS [Project Name],
    sum(case when Projects_tasks.taskID is null then 0 else 1 end) AS #tasks,
    Projects.projectID AS [Project ID]

FROM Projects  

LEFT JOIN Projects_tasks
ON Projects.projectID = Projects_tasks.projectID 

GROUP BY Projects.projectName,
    Projects.projectID
于 2012-08-22T14:15:52.860 に答える
0

INNER JOIN を LEFT JOIN に変更してみてください

SELECT     Projects.projectName AS [Project Name],
       ISNULL(COUNT(Projects_tasks.taskID),0) AS #tasks, Projects.projectID AS [Project ID]

FROM Projects LEFT JOIN Projects_tasks ON Projects.projectID = Projects_tasks.projectID

GROUP BY Projects.projectName,Projects_tasks.taskID,Projects.projectID
于 2012-08-22T14:53:16.863 に答える