2012-08-22 3 views
0

У меня есть этот запрос Sql, чтобы показать мне, сколько задач в проекте, но проблема не отображается. Проекты с заданием 0 могут мне помочь?sql server count() функция?

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 

ответ

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

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 
1

Используйте LEFT join, ISNULL(), a nd не группируются по столбцу, который вы подсчитываете.

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 
0

Попробуйте изменить INNER JOIN на LEFT JOIN

Вы не видите 0, потому что нет задачи, чтобы присоединиться.

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 
0

Сомневаюсь, что ваш запрос когда-либо вернет более 1 задачи как количество задач. Project_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 
0

Try путем изменения 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