Если операторы внутри, где предложение в SQL - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующий набор данных

DNo     Quantity  Sites ID      Desc
----------------------------------------------------------------------------
18050075    9       2   ADD6    Number of client reporting sites
18050075    9       2   ADD7    Annual Maintenance
18050075    9       2   ADD8    Ongoing Fees
18050075    1       2   ADD9    Employee Meeting (per day plus incurred expenses)
18050075    0       2   ADD10   Custom Data file Layouts
18050075    0       2   ADD11   Error Correction for more than 2% errors in a single 

В операторе выбора внутри хранимой процедуры я хочу вернуть только ADD9, ADD10, ADD11, если количество больше 0. Может кто-нибудь сказать, как ямогу написать оператор if внутри условия where, чтобы я мог применить условие только к конкретным идентификаторам

. Таким образом, мой набор результатов должен быть как ниже

 18050075   9   2   ADD6    Number of client reporting sites
 18050075   9   2   ADD7    Annual Maintenance
 18050075   9   2   ADD8    Ongoing Fees
 18050075   1   2   ADD9    Employee Meeting (per day plus incurred expenses)

Спасибо

Ответы [ 5 ]

0 голосов
/ 22 мая 2018

Возможной альтернативой является использование вложенных функций CASE.Например:

select * 
from your_data_table
where 1 = (CASE WHEN ID IN ('ADD9', 'ADD10', 'ADD11') THEN CASE WHEN Quantity > 0 THEN 1 END ELSE 1 END)

Логика работает так:

IF ID IN ('ADD9', 'ADD10', 'ADD11')
THEN 
    IF Quantity > 0 
    THEN 
        Include It
    ELSE
        Exclude It
ELSE
    Include It
0 голосов
/ 22 мая 2018

Для вашего результирующего набора, который вы предоставили в качестве вывода

SELECT *
FROM tableName
WHERE Quantity > 0

Для вашего результирующего набора, который вы упомянули в описании

SELECT *
FROM tableName
WHERE ID IN ('ADD9', 'ADD10', 'ADD11') AND Quantity > 0

Примечание: вы фактически запрашиваетедва разных выхода, как вы упомянули в описании и дали вывод, поэтому, пожалуйста, выберите тот, который вы хотите.

0 голосов
/ 22 мая 2018

Это то, что вы хотите?

SELECT *
FROM yourTable
WHERE ID NOT IN ('ADD9', 'ADD10', 'ADD11') OR Quantity > 0;
0 голосов
/ 22 мая 2018

Как насчет ниже?Он основан на разделении ваших данных на два отдельных запроса и последующем добавлении.

select * -- this gets all data other than these ids
from your_data_table
where ID not in ('ADD9', 'ADD10', 'ADD11')

union all -- this joins everything toghether

select * -- this gets all requested data for these ids
from your_data_table
where ID in ('ADD9', 'ADD10', 'ADD11') and Quantity > 0
0 голосов
/ 22 мая 2018

Выберите * из таблицы, где (ID в («ADD9», «ADD10», «ADD11») и количество> 0) или ID не в («ADD9», «ADD10», «ADD11»)

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