Несколько циклов в простом выражении SQL - PullRequest
0 голосов
/ 12 октября 2018

Это теоретический вопрос.Я хотел бы знать, возможно ли что-то вроде следующего:

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

select
    Id,
    Item,
    Site1, Site2..., Site99
from 
    Sites 
where
    (Site1 is not null and Site1 <> 'NY')
    or (Site2 is not null and Site2 <> 'NY')
    or ...
    or (Site99 is not null and Site99 <> 'NY')

Есть ли способ зациклить Site1 -> 99 в операторе и условии вместо того, чтобы вводить его вручную?

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Вы можете использовать таблицу подсчета ...

WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
cte(N) AS
(
    SELECT  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E2
)

select '(Site' + cast(N as varchar) + ' IS NOT NULL and Site' + cast(N as varchar) + ' <> ''NY'')' +  case when N != 99 then ' OR' else '' end
from cte
where N < 100

Затем скопируйте это и вставьте в свой запрос.

0 голосов
/ 12 октября 2018

Есть ли способ зациклить Site1 -> 99 в операторе и условии вместо того, чтобы вводить его вручную?

Только с динамическим SQL.

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