计算已登录用户打开或保留的任务数

时间:2012-09-20 19:12:46

标签: sql sql-server

我想创建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

enter image description here

3 个答案:

答案 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