powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про условие
5 сообщений из 5, страница 1 из 1
Вопрос про условие
    #40123898
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть такие исходные данные
SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
DECLARE @Epsilon FLOAT = 0.1;

WITH Table1 AS
(
	SELECT
		*
	FROM
		(VALUES
			(1, 10, 9.9) -- Не должно отображаться
			,(2, 10, 9.8)
			,(3, 9.9, 10) -- Не должно отображаться
			,(4, 9.8, 10)
			,(5, 0, 0.1) -- Не должно отображаться
			,(6, 0, 0.2)
			,(7, 0.1, 0) -- Не должно отображаться
			,(8, 0.2, 0)
			,(9, 0.1, Null) -- Не должно отображаться
			,(10, 0.2, Null)
			,(11, 0, 0)
			,(12, 0, Null)
		) t (Id, Value1, Value2)
)

Задача такая, что из этой таблицы нужно получить только те строки, которые превышают заданный Epsilon . А если у Value1 = 0 и Value2 = 0, то также выгружаются.

Написал такое решение
SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT
	Id,
	Value1,
	IsNull(Value2, 0) AS Value2
FROM
	Table1
WHERE
	(CASE WHEN (Value1 = 0 AND IsNull(Value2, 0) = 0) THEN 1 ELSE 0 END) = 1
	OR
	((CASE WHEN NOT (Value1 = 0 AND IsNull(Value2, 0) = 0) THEN ABS(Value1 - IsNull(Value2, 0)) ELSE 0 END) >
		(CASE WHEN NOT (Value1 = 0 AND IsNull(Value2, 0) = 0) THEN @Epsilon ELSE 0 END)) 

Решение работает. Но хотелось узнать, возможно ли в WHERE написать оптимальнее?
...
Рейтинг: 0 / 0
Вопрос про условие
    #40123901
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

через UNION
...
Рейтинг: 0 / 0
Вопрос про условие
    #40123902
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Case-ы выкинь.
...
Рейтинг: 0 / 0
Вопрос про условие
    #40123912
Alex_Va
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
WHERE (Value1 = 0 AND IsNull(Value2, 0) = 0) OR
(ABS(Value1 - IsNull(Value2, 0)) > @Epsilon)
...
Рейтинг: 0 / 0
Вопрос про условие
    #40123921
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос про условие
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]