sql server count()函数?

时间:2012-08-22 14:11:36

标签: sql sql-server tsql

我有这个Sql查询向我展示Project下有多少任务,但问题是它没有显示有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

7 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用LEFT join,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

答案 2 :(得分: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

答案 3 :(得分:0)

尝试将INNER JOIN更改为LEFT JOIN

你没有看到0,因为没有任何要加入的任务。

答案 4 :(得分:0)

使用LEFT JOIN。还COALESCE转换null值。 COALESCE必须位于COUNT函数内,因为Projects_tasks.taskID列可以 NULL

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

答案 5 :(得分: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

答案 6 :(得分: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