вопрос sql, альтернатива if-else для этого примера? - PullRequest
0 голосов
/ 12 октября 2010
DECLARE @cityID bigint;
set @cityID = NULL
--set @cityID = 3

SELECT ID,
        Name,
        CityID,
        IsProvince
FROM TABLE t
    WHERE ISNULL(t.CityID, -1) = ISNULL(@cityID, -1)

всякий раз, когда @cityID равен NULL, t.CityID также NULL для этой записи.

Только одна запись может быть истинной для IsProvince

Есть ли способ проверить без выполнения условия if-else, хочу ли я сделать следующее:

1) Если @cityID равно NULL, то получить запись, чья IsProvince равна 1

2) Если @cityID равен NOT NULL, получите запись, чья CityID = @cityID

Спасибо,

Voodoo

1 Ответ

1 голос
/ 12 октября 2010

Вы можете сделать это в ГДЕ:

DECLARE @cityID bigint;
set @cityID = NULL
--set @cityID = 3

SELECT ID,
        Name,
        CityID,
        IsProvince
FROM TABLE t
    WHERE (@cityID IS NULL AND t.CityID IS NULL AND IsProvince = 1)
          OR (t.CityID = @cityID)

Это должно работать, так как что угодно = NULL всегда возвращает false. Первое предложение должно решить вашу # 1, а второе решает # 2. Я не уверен, действительно ли вам нужно предложение t.CityID IS NULL, поскольку ваши критерии для # 1 не упоминают его.

Имеет ли это смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...