假设我有下表:
+-------+------------+
| nGroup | Status |
+-------+------------+
| 1 | DONE |
| 1 | UNKNOWN |
| 1 | DONE |
| 2 | INPROGRESS |
| 2 | INPROGRESS |
| 2 | DONE |
| 3 | INPROGRESS |
| 3 | DONE |
| 3 | DONE |
+-------+------------+
如果 nGroup 的状态为 INPROGRESS ,则仅返回该组中状态为 INPROGRESS 的行。 strong>。
如果 nGroup 的所有状态与 INPROGRESS 不同,则返回该组的所有可用状态。
因此对于此示例,我将获得以下输出:
+-------+------------+
| nGroup | Status |
+-------+------------+
| 1 | DONE |
| 1 | UNKNOWN |
| 1 | DONE |
| 2 | INPROGRESS |
| 2 | INPROGRESS |
| 3 | INPROGRESS |
+-------+------------+
我尝试了以下查询:
SELECT *
FROM dbo.myTable T1
WHERE Status IN (
CASE WHEN EXISTS( SELECT 1 FROM myTable T2 WHERE T2.STATUS = 'INPROGRESS' AND T1.nGroup = T2.nGroup) THEN 'INPROGRESS'
ELSE (SELECT Status FROM myTable T2 WHERE T1.nGroup = T2.nGroup)
END
)
但是运行它时出现以下错误:
子查询返回了多个值。当 子查询遵循=,!=,<,<=,>,> =,或当子查询用作 表达式。
答案 0 :(得分:2)
这可以做到:
select m.*
from myTable m
where
m.Status = 'INPROGRESS'
OR NOT EXISTS (
select 1 from myTable where nGroup = m.nGroup and Status = 'INPROGRESS'
)
答案 1 :(得分:0)
嗯。 。 。我想你想要
sed