2015-03-10 3 views
-1

3I имеют следующий запросДобавить несколько условие группе и имеющий оговорку

SELECT deal_id, max(test_value) - min(test_value) AS deviation 
    FROM table 
    WHERE run_date >= Dateadd(month, -4, Getdate()) 
    and test_alias='BOND_P' 
    group by deal_id 
    having (max(test_value) - min(test_value)) BETWEEN 1.79 AND 4.5 

и

 SELECT deal_id, max(test_value) - min(test_value) AS deviation 
    FROM ems.cdotests 
    WHERE run_date >= Dateadd(month, -3, Getdate()) 
    and test_alias='CAA/CCC' 
    group by deal_id 
    having (max(test_value) - min(test_value)) BETWEEN 2.79 AND 2 

Мне нужно объединить этот запрос, так что я могу получить выход как

1: result set of query 1 intersected with result set of query 2 
2: result set of query 1 unioned with result set of query 2 

«Пересечение» или «Союз» будет зависеть от параметра, переданного хранимой процедуре

Ps Примечание: Критерии даты запуска между двумя запроса могут быть различными Любая помощь будет оценена

+0

Что вы имеете в виду и/или результат? Вам нужно запустить оба запроса или любой запрос на основе условия? –

+0

Мне нужно запустить один запрос 'и' или 'или на основе моего битового флага, который передается как параметр для сохраненного процесса. – user3290807

+0

Вы хотите, чтобы результат был как один вывод или два значения для и условие? –

ответ

0
IF @myBitParameter = 0 
    SELECT deal_id, max(test_value) - min(test_value) AS deviation 
    FROM [table] 
    WHERE run_date >= Dateadd(month, -4, Getdate()) 
    and test_alias='BOND_P' 
    group by deal_id 
    having (max(test_value) - min(test_value)) BETWEEN 1.79 AND 4.5 

    UNION ALL --or UNION, if you don't want duplicates 

    SELECT deal_id, max(test_value) - min(test_value) AS deviation 
    FROM ems.cdotests 
    WHERE run_date >= Dateadd(month, -3, Getdate()) 
    and test_alias='CAA/CCC' 
    group by deal_id 
    having (max(test_value) - min(test_value)) BETWEEN 2.79 AND 2 

ELSE 
    SELECT deal_id, max(test_value) - min(test_value) AS deviation 
    FROM [table] 
    WHERE run_date >= Dateadd(month, -4, Getdate()) 
    and test_alias='BOND_P' 
    group by deal_id 
    having (max(test_value) - min(test_value)) BETWEEN 1.79 AND 4.5 

    INTERSECT 

    SELECT deal_id, max(test_value) - min(test_value) AS deviation 
    FROM ems.cdotests 
    WHERE run_date >= Dateadd(month, -3, Getdate()) 
    and test_alias='CAA/CCC' 
    group by deal_id 
    having (max(test_value) - min(test_value)) BETWEEN 2.79 AND 2 

Я чувствую, что должен быть способ сделать это чище с КТР, но не имеют чтобы обмануть его. Кто-то не стесняется очистить это или сделать из него лучший ответ.

+0

да, это то, что искал – user3290807

+0

Обратите внимание, что 'UNION ALL' будет давать вам дубликаты. Если вам нужны разные значения, просто используйте 'UNION' –

+0

спасибо за указание на то, что – user3290807

Смежные вопросы