Выберите столбец, если другой столбец пуст - PullRequest
44 голосов
/ 26 марта 2012

Мне нужно выбрать поле с именем ProgramID из таблицы, и если ProgramID равен NULL, тогда мне нужно выбрать значение в InterimProgramID из той же таблицы и присвоить ему псевдоним ProgramID.

Как мне сделатьусловный оператор SELECT для этого?

Ответы [ 6 ]

77 голосов
/ 26 марта 2012

Вам нужна функция ISNULL.

SELECT ISNULL(a, b)

b выбирается, если a равно нулю.

Кроме того, вы можете использовать опцию WHEN / THEN select, ищите вBOL.По сути: его блок переключателя / регистра c соответствует SQL.

16 голосов
/ 26 марта 2012

Вы можете использовать либо функцию ISNULL , либо функцию COALESCE . Они оба делают одно и то же, однако ISNULL принимает только два параметра, а COALESCE принимает несколько параметров (возвращая первое ненулевое значение, с которым оно сталкивается). Оба пробуют первый параметр, затем второй (и COALESCE продолжается)

DECLARE @IAMNULL VARCHAR
DECLARE @IAMNOTNULL VARCHAR
SET @IAMNOTNULL = 'NOT NULL'

SELECT ISNULL(@IAMNULL, @IAMNOTNULL)
--Output: 'NOT NULL'

DECLARE @IAMNULLALSO VARCHAR

SELECT COALESCE(@IAMNULL, @IAMNULLALSO, @IAMNOTNULL)
--Output: 'NOT NULL'
7 голосов
/ 26 марта 2012
  select COALESCE ( ProgramID , InterimProgramID ) as 'ProgramID' 
1 голос
/ 27 марта 2012
SELECT ProgramID
  FROM a_table
 WHERE ProgramID IS NOT NULL
UNION
SELECT InterimProgramID AS ProgramID
  FROM a_table
 WHERE ProgramID IS NULL;
0 голосов
/ 07 августа 2016

Coalesce ('zzz-' + ProgramID, InterimID) в качестве programID все равно будет игнорировать ProgramID, даже если у вас есть предтекстовое значение.Это крутая маленькая функция

0 голосов
/ 13 июля 2015

Вы также можете использовать функцию IFNULL

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