Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перечисление полей в WHERE  [new]
Igor N
Member

Откуда:
Сообщений: 4
Добрый день,

Есть условие в запросе:

WHERE
	a.[RM21021] NOT IN ('') AND
	b.RM02006 NOT IN ('') AND
	a.[RM21196] NOT IN ('') AND
	a.[RM21276] NOT IN ('') AND
	a.[RM21277] NOT IN ('') AND


Можно ли как то сделать перечисление полей которые не могут равняться пустому значению? Что типа такого:

(a.[RM21021], b.[RM02006], a.[RM21196], a.[RM21276], a.[RM21277]) NOT IN ('')
21 окт 14, 12:04    [16735588]     Ответить | Цитировать Сообщить модератору
 Re: Перечисление полей в WHERE  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
Igor N,

Нужно больше информации, что это за поля и что может стоять в IN.

Пока могу предложить такое

NULLIF(a.[RM21021], '') +  NULLIF(b.[RM02006], '') + NULLIF(a.[RM21196], '') + NULLIF(a.[RM21276], '') + NULLIF(a.[RM21277], '') IS NOT NULL
21 окт 14, 12:13    [16735688]     Ответить | Цитировать Сообщить модератору
 Re: Перечисление полей в WHERE  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Самое очевидное:
'' NOT IN (a.[RM21021], b.[RM02006], a.[RM21196], a.[RM21276], a.[RM21277])


Но эффективнее
a.[RM21021]<>'' AND
	b.RM02006 <>'' AND
	a.[RM21196] <>'' AND
	a.[RM21276] <>'' AND
	a.[RM21277] <>'' AND
Если индексы есть, конечно.
21 окт 14, 12:16    [16735715]     Ответить | Цитировать Сообщить модератору
 Re: Перечисление полей в WHERE  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
concat() также. Но это трата ресурсов.
21 окт 14, 12:37    [16735880]     Ответить | Цитировать Сообщить модератору
 Re: Перечисление полей в WHERE  [new]
Igor N
Member

Откуда:
Сообщений: 4
Большое спасибо :)

Подошел вариант:

'' NOT IN (a.[RM21021], b.[RM02006], a.[RM21196], a.[RM21276], a.[RM21277])
22 окт 14, 09:53    [16741341]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить