我有两张桌子:ToDoList& ToDotasks
我需要编写一个查询,它将返回ToTList列以及未完成任务的计数,即toDotasks表中taskstatus = 0的位置
我的查询:
SELECT *,(select count(*) from todotasks where taskstatus = 0 group by
listid) as TotalIncomplete FROM dbo.ToDoList
错误:子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
TodoList的:
ListID ListName
1 List 5600
2 List 22
3 List 30
4 List 4
5 List 1
ToDotasks
taskid ListID taskStatus
3 2 0
6 3 0
14 3 0
16 3 0
19 4 1
36 1 0
38 1 1
39 1 0
40 2 0
41 2 0
我在追求的是:
ListID ListName TotalIncomplete
1 List 5600 2
2 List 22 3
3 List 30 3
4 List 4 0
5 List 1 0
答案 0 :(得分:1)
请尝试以下方法......
SELECT ToDoList.ListID AS ListID,
ToDoList.ListName AS ListName,
COUNT( incompleteTasks.ListID ) AS IncompleteTaskCount
FROM ToDoList
LEFT JOIN
(
SELECT ListID AS ListID
FROM ToDoTasks
WHERE taskStatus = 0
) incompleteTasks ON ToDoList.ListID = incompleteTasks.ListID
GROUP BY ToDoList.ListID
ORDER BY ToDoList.ListID;
我使用的逻辑是......
要计算不完整的任务,我们首先需要列出taskStatus
0
taskid
的任务。 taskStatus
与计数无关,经过测试,ListID
将无关紧要。因此,此列表只需要包含每个符合条件的任务incompleteTasks
。我已将此列表命名为ToDoList LEFT JOIN incompleteTasks
。
incompleteTasks
会为我们提供一个表格,其中包含来自ToDoList
的每个值及其ToDoList
的相应值。如果incompleteTasks
中的记录在ToDoList
中没有任何相应记录,我们会从NULL
获得值LEFT JOIN
值。
通过将ListID
ed列表的值List
从COUNT()
分组,我们实现了与所需输出相对应的分组。然后,我们使用ListID
来计算incompleteTasks
在COUNT()
的加入列表字段中显示的次数。注意:NULL
不计算ListID
值。
然后可以使用List
按ORDER BY ToDoList.ListID
的{{1}}值对上面生成的列表进行排序。
如果您有任何问题或意见,请随时发表评论。
答案 1 :(得分:-1)
非常直接..这是解决方案
select ToDoList.lisid, ToDoList.lastname, count(ToDoTasks.taskstatus) from
ToDoList JOIN ToDoTasks ON ToDoList.listid = ToDoTasks.listid
where ToDoTasks.taskstatus = 0
group by ToDoList.listname,ToDoList.listid
使用您的表名更新查询.... 希望这可以帮助。干杯!!!