TheRedEye Ответов: 1

Как выбрать более конкретное значение в TSQL


Итак, у меня есть таблица, хранящая кучу значений по умолчанию, где эти значения могут быть потенциально переопределены. Мне нужен запрос, чтобы выбрать значение по умолчанию, если оно не было найдено.

В приведенном ниже примере F1 является значением по умолчанию, если F2 равно null. Если F2 не равно null, я хочу вернуть его вместо этого.

Поэтому я могу решить эту проблему, сначала посмотрев, существуют ли определенные строки, а затем выбрав эти строки, в противном случае выбрав строки по умолчанию. Это просто кажется очень неуклюжим и повторяющимся. Есть ли способ включить все это в один запрос?

Что я уже пробовал:

DECLARE @x char = 'A'

DECLARE @t TABLE (
	F1 char,
	F2 int null
)

INSERT INTO @t (F1, F2) VALUES ('A', 1)
INSERT INTO @t (F1, F2) VALUES ('A', NULL)
INSERT INTO @t (F1, F2) VALUES ('B', 2)
INSERT INTO @t (F1, F2) VALUES ('C', NULL)

IF EXISTS(
			SELECT * 
			FROM @t
			WHERE F1 = @x AND
				F2 IS NOT NULL  
		)
BEGIN
	SELECT * 
	FROM @t
	WHERE F1 = @x AND
		F2 IS NOT NULL  
END 
ELSE
BEGIN
	SELECT * 
	FROM @t
	WHERE F1 = @x AND
		F2 IS NULL  
END

/*
This correctly returns 

when @x = 'A'
F1 F2
-------
A 1

when @x = 'B'
F1 F2
-------
B 2

when @x = 'C'
F1 F2
-------
C NULL

*/

Gerry Schmitz

F1-это значение по умолчанию, если F2 равно нулю

Не иметь смысла.

1 Ответов

Рейтинг:
0

Member 7870345

Если ваша таблица называется "t_example", вы можете использовать этот select stament:

SELECT  f1,MAX(F2) AS F2
	FROM t_example
	GROUP  BY F1
	ORDER BY 1

Это приводит к следующему результату:
F1 F2
В 1
B 2
С НУЛЕМ

Если вы хотите, вы можете добавить "где", например:
SELECT  f1,MAX(F2) AS F2
	FROM t_example
	WHERE F1='B'
	GROUP  BY F1


CHill60

Удачное решение. Единственное, что я хотел бы добавить, - это объяснить, почему это работает ... "Кроме графа, агрегатные функции игнорируют значения null." Видеть Агрегатные функции (Transact-SQL) | Microsoft Docs[^]