Union All With if / else T-SQL

I was wondering how I can have UNION ALL with an IF / ELSE statement.

For instance:

SELECT * FROM A
UNION ALL
SELECT * FROM B
UNION ALL

IF @type = 1
   BEGIN
      SELECT * FROM C
   END
ELSE
   BEGIN
      SELECT * FROM D
   END

UNION ALL

SELECT * FROM E

I get a syntax error.

+3
source share
2 answers
SELECT * FROM A 
UNION ALL 
SELECT * FROM B 
UNION ALL 
SELECT * FROM C WHERE @type = 1
UNION ALL
SELECT * FROM D WHERE @type <> 1 OR @type IS NULL
UNION ALL 
SELECT * FROM E ;
+15
source

Well, one way to do this is to use dynamic sql

first create a query string and then run it. So you have full control

declare query nvarchar(max)
set query = 'SELECT * FROM A
             UNION ALL
             SELECT * FROM B
             UNION ALL '

IF @type = 1
BEGIN
set query = query + '
            SELECT * FROM C'
END
ELSE
BEGIN
set query = query + '
            SELECT * FROM D'
END
set query = 'UNION ALL
             SELECT * FROM E'

exec(query)
+2
source

Source: https://habr.com/ru/post/1777119/


All Articles