我有这个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
答案 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