То, что я пытаюсь сделать, должно быть очень простым, но почему-то я не могу найти правильный ответ на мою проблему. Я просил что-то подобное в прошлом, но ответ, который мне дал раньше, больше не соответствует требованиям. Так вот что происходит - мне нужно условно выбрать значения из таблицы в моей базе данных в другой, чем обычным способом, например, так:Если логика в SQL-заявлении
Таблица:
- Id Int (не равно нулю)
- ParentId INT (не нуль)
- EventOn DateTime (не нуль)
- ИНТ пользователя (нуль)
К следующим выберите:
SELECT RST.* FROM RangeSheetTime RST
WHERE RST.[User] is not null
(в приведенном выше случае, я беру все строки, в которых пользователь не равно нулю)
Select RST.* FROM RangeSheetTime RST
WHERE RST.[User] is null
(в приведенном выше случае, я беру все строки, где пользователь равен нулю)
Так что же я пытаюсь сделать? Я хочу построить оператор select, который при задании условия, например EventOn < GETDATE(), будет извлекать все строки, в которых USER не равен NULL. Если нет каких-либо строк, в которых USER не является нулевым, то он должен извлекать строки, где он равен NULL, если таковой имеется.
Как я могу заставить это работать?
Примечание: Я не могу использовать, если здесь, иначе это было бы проще.
EDIT:
Я буду пытаться объяснить это лучшее, что я могу. Представьте, что у меня есть 3 строки для одного и того же ParentId, 31. 2 из этих строк имеют столбец с именем StartOrEnd, установленным в 1. Существует только разница между ними: для первого, столбец USER - null; для второго, столбец USER имеет значение 90. Третья строка имеет столбец StartOrEnd, установленный в 0. Теперь я хочу отображать результаты независимо от значения startorend. Но есть улов. Для каждого startorend, если есть более одной строки, и один из них имеет USER, установленный в null, а остальные не равны null, , тогда будут отображаться только ненулевые строки для этого startorend. но в случае, если для этого условия нет ненулевых строк, будут отображаться нулевые значения. Надеюсь, теперь я поняла.
+1, ваша ссылка для MS SQL, но это также самый простой способ в Oracle 8i, так или 9i ('decode' делает живой вид более твердого :)). ** Btw **, что другие СУБД реализуют CASE? –
В теории это поддерживается всеми СУБД, как это стандарт, определенный в SQL-92 –
Упс, кажется, что мы оба пропустили пункт вопроса –