我想创建Sql脚本,以查看仅为已分配的登录用户打开或暂停的任务数 任务 结果 HelloWorld1(0) HelloWorld2(2) HelloWorld3(1) HelloWorld4(5)
SELECT Projects.projectID,
Projects.projectName + ' ' + '(' + CONVERT(NVARCHAR, COUNT(Projects_tasks.taskID)) + ')' AS Project
FROM Projects
LEFT JOIN Projects_tasks ON Projects.projectID = Projects_tasks.projectID
INNER JOIN Users_projects ON Projects.projectID = Users_projects.projectID
INNER JOIN Tasks ON Projects_tasks.taskID = Tasks.taskID
INNER JOIN Users_Tasks ON Tasks.taskID = Users_Tasks.TaskID
WHERE Users_Tasks.userID = @userID
AND Tasks.status = 'Open'
AND Tasks.status = 'Onhold'
GROUP BY Users_projects.userID,
Projects.projectName,
Projects.projectID,
Users_Tasks.userID
答案 0 :(得分:1)
你有:
AND (Tasks.status = 'Open' AND Tasks.status = 'Onhold')
哪个不可能是真的;任务不能同时具有两个值。你想要:
AND (Tasks.status = 'Open' OR Tasks.status = 'Onhold')
更好的是,使用IN
:
AND (Tasks.status IN ('Open', 'Onhold') )
答案 1 :(得分:0)
没有行可以匹配:
(Tasks.status = 'Open' AND Tasks.status = 'Onhold')
尝试
(Tasks.status = 'Open' OR Tasks.status = 'Onhold')
或者:
Tasks.status in ('Open', 'Onhold')
答案 2 :(得分:0)
如前所述,AND
子句无法满足,因为Task.Status
只能打开或 OnHold 。使用以下代码:
SELECT Projects.projectID,
Projects.projectName + ' ' + '(' + CONVERT(NVARCHAR, COUNT(Projects_tasks.taskID)) + ')' AS Project
FROM Projects
LEFT JOIN Projects_tasks ON Projects.projectID = Projects_tasks.projectID
INNER JOIN Users_projects ON Projects.projectID = Users_projects.projectID
INNER JOIN Tasks ON Projects_tasks.taskID = Tasks.taskID
INNER JOIN Users_Tasks ON Tasks.taskID = Users_Tasks.TaskID
WHERE Users_Tasks.userID = @userID
AND (Tasks.status = 'Open' OR Tasks.status = 'Onhold')
--also this code can be used:
--AND Tasks.status in ('Open', 'Onhold')
GROUP BY Users_projects.userID,
Projects.projectName,
Projects.projectID,
Users_Tasks.userID