我有一个SQL表,其中包含有关项目的一些信息,并且大致类似于下表。在此表中,一个项目可能具有多个实例,因为它具有多个任务。每个任务都会有一个状态,并且每个状态都有一个与之相关的ID。如何编写查询以获取状态为打开,关闭,开票或已取消的项目1的所有实例?即使没有状态为已取消的项目一的实例?
PROJECT NAME|PROJECT ID|TASK|STATUS|status_code
project_1 1 seo open 5
project_1 1 blog closed 0
project_1 1 data billed 2
project_2 2 seo open 5
project_3 3 seo open 5
project_4 4 seo open 5
project_5 5 seo open 5
注意:每个状态都与一个状态ID相关
0 = closed
1 = cancelled
2 = billed
3 = paid
4 = on hold
5 = open
6 = pending
截至目前,我的查询看起来像
"SELECT * FROM Table WHERE project_id = 1 AND Status_Code = (0 OR 1 OR 2 OR 3 OR 4 OR 5 OR 6)"
尽管表中存在status_code = 2 0&5的多个实例,但此操作不会返回
如果我将查询更改为
SELECT * FROM table WHERE project_id = 1 AND status_code = 2
我确实获得了状态码2的所有实例,但是我需要能够检查所有这些实例,并可能查询一个不存在的实例。
答案 0 :(得分:2)
尝试一下
SELECT * FROM Table
WHERE project_id = 1 AND Status_Code IN( 1, 2, 3, 4, 5, 6)
此外,您可能希望过滤出重复项,所以
SELECT DISTINCT [PROJECT NAME], [PROJECT ID]
FROM Table
WHERE project_id = 1 AND Status_Code IN( 1, 2, 3, 4, 5, 6)
答案 1 :(得分:0)
首先,如果这是一个任务表,为什么没有任务ID?
如果我理解疑问权,那么GROUP BY
或DISTINCT
SELECT project_id, task, status FROM Table WHERE project_id = 1 AND Status_Code IN (0,1,2,3,4,5,6)
GROUP BY
project_id, task, status
将返回所有3列的每个不同值 uainv不带group by的不同,将返回相同的