2014-11-11 5 views
0

Я хотел бы спросить, можно ли создать оператор SQL с if или подобной структурой. У меня есть два запроса и я хотел бы объединить их в один. Единственное различие между ними состоит в том, что у него есть дополнительные условия И в его предложении WHERE. Я пробовал делать случай выбора, но был не очень успешным. Я создам параметр «test», который займет 1 или 2, и это условие должно определить, какой запрос выполнить. Вот запросы ...Условное выражение SQL

Запрос 1

SELECT ID,AVG(B.VOL) AS PVOL 
FROM (SELECT VAR1 AS ID, SUM(VOL) AS PVOL FROM table1 WHERE VAR1='xyz' 
AND DATE_D>'10/28/2013' AND DATE_D<'10/31/2013' 
AND CUSTOMER='Market' AND MARKET='South' AND PROJECT=0 
GROUP BY VAR1,DATE_D) B GROUP BY ID 

Запрос 2

SELECT ID,AVG(B.VOL) AS PVOL 
FROM (SELECT VAR1 AS ID, SUM(VOL) AS PVOL FROM table1 WHERE VAR1='xyz' 
AND DATE_D>'10/28/2013' AND DATE_D<'10/31/2013' 
AND PROJECT=0 
GROUP BY VAR1,DATE_D) B GROUP BY ID 
+0

Что вы хотите установить возвращаемые быть? Например, вы можете просто использовать «union all» между ними. –

+0

Привет @GordonLinoff. Я пытаюсь выполнить один из запросов на основе параметра, который будет передаваться приложению. Это будет динамично. Итак, что-то вроде ... IF (параметр == 1) THEN Query1 ELSE Query2 END – rafacardosoc

ответ

1

Вы можете добавить условие на основе вашего параметра @test, как показано ниже же запрос может быть использован, на основе параметра условие будет изменяться.

SELECT ID,AVG(B.VOL) AS PVOL 
FROM (SELECT VAR1 AS ID, SUM(VOL) AS PVOL FROM table1 WHERE VAR1='xyz' 
AND DATE_D>'10/28/2013' AND DATE_D<'10/31/2013' 
AND ((@test = 1 AND CUSTOMER='Market' AND MARKET='South' AND PROJECT=0) 
     OR (@test =2 AND PROJECT=0) 
    ) 
GROUP BY VAR1,DATE_D) B GROUP BY ID 
+0

Я использую этот запрос внутри Tableau, программного обеспечения для отчетности. Он позволяет мне создавать параметры и динамически передавать их значение в запрос. Поэтому на основе вашего ответа ... SELECT ID, AVG (B.VOL) AS PVOL FROM (SELECT VAR1 AS ID, SUM (VOL) AS PVOL FROM table1 WHERE VAR1 = 'xyz' AND DATE_D> '10/28/2013 'И DATE_D <'10/31/2013' И (( == 1 И CUSTOMER = 'Market' AND MARKET = 'South') ИЛИ ( == 0 AND ПРОЕКТ = 0)) GROUP BY VAR1, DATE_D) B GROUP BY ID я получаю следующее сообщение об ошибке: semanticexception [ошибка 10002] ссылка недействительна колонка – rafacardosoc

1

Вы можете создать sproc, который принимает параметр «test», который вы надеетесь создать свой оператор IF.

create procedure --sprocname 
(
@test int 
) 
as 
begin 
set nocount on 
if 
@test = --bool 
select statement 1 
else 
select statement 2 
end 

извините за плохой формат я был в спешке настраивая это

+0

Привет @SFrejofsky, Я использую этот SQL заявление внутри Tableau, в инструмент отчетности, и он не обрабатывает процедуры. Спасибо за предложение, хотя – rafacardosoc

+0

Я не знаком с этим инструментом отчетности, но я должен был бы предположить, что у него есть секция операторов sql, в которой вы сейчас кодируете свои утверждения. Вы бы создали sproc в sql, а затем выполнили его как sqlstatement.'exec --sprock --parameter' Я бы предположил, что программа отчетности, которую вы используете, распознает стандартный SQL-синтаксис – SFrejofsky

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