Предположим, у меня есть следующая таблица:
+-------+------------+
| nGroup | Status |
+-------+------------+
| 1 | DONE |
| 1 | UNKNOWN |
| 1 | DONE |
| 2 | INPROGRESS |
| 2 | INPROGRESS |
| 2 | DONE |
| 3 | INPROGRESS |
| 3 | DONE |
| 3 | DONE |
+-------+------------+
Если nGroup имеет одно значение Status to INPROGRESS , то возвращаются только строки этой группы, содержащие статус INPROGRESS .
Если все Статус 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
)
Но я получаю следующую ошибку при запуске:
Подзапрос вернул более 1 значения. Это не разрешено, когда
подзапрос следует =,! =, <, <=,>,> = или когда подзапрос используется как
выражение.