Sql 条件并集中的错误

Sql 条件并集中的错误,sql,sql-server,if-statement,conditional,union,Sql,Sql Server,If Statement,Conditional,Union,我有一个SQL: SELECT MONTH(data) AS MES, cor, CASE month(data) WHEN 1 THEN 'Janeiro' WHEN 2 THEN 'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN

我有一个SQL:

SELECT        MONTH(data) AS MES, cor, CASE month(data) 
                          WHEN 1 THEN 'Janeiro' WHEN 2 THEN 'Fevereiro' WHEN 3 THEN 'Março' WHEN 4 THEN 'Abril' WHEN 5 THEN 'Maio' WHEN 6 THEN 'Junho' WHEN 7 THEN 'Julho' WHEN
                          8 THEN 'Agosto' WHEN 9 THEN 'Setembro' WHEN 10 THEN 'Outubro' WHEN 11 THEN 'Novembro' WHEN 12 THEN 'Dezembro' END AS MESCOR, COUNT(*) 
                          AS Expr1, CASE cor WHEN 'AM' THEN '2' WHEN 'VD' THEN '1' WHEN 'VM' THEN '3' END AS Expr2 

FROM            TBINICIATIVAS_PREVISTAS
WHERE        (login ='xxxxxxx')
GROUP BY MONTH(data), cor

UNION 
SELECT '1', 'VD', 'Janeiro',0,'1' 

UNION
SELECT '1', 'AM', 'Janeiro',0,'2' 

UNION
SELECT '1', 'VM', 'Janeiro',0,'3'


ORDER BY expr2, mes

但是我需要
联合
是有条件的。 比如:

if (select count(*) .... where cond1...) = 0
UNION 
SELECT '1', 'VD', 'Janeiro',0,'1' 

if (select  count(*) ....where cond2...) = 0
UNION
SELECT '1', 'AM', 'Janeiro',0,'2'

if (select  count(*) ....where cond3...) = 0
UNION
SELECT '1', 'VM', 'Janeiro',0,'3'
我试过了,但总是出现语法错误


可以这样做吗?

将您的条件移动到每个
联合
选择
中的
WHERE
子句中(除了
选择
之外,您不能在
联合
之间放置任何内容)

另外,我从您的条件中注意到,您正在通过执行
count=0
检查行是否存在。将其替换为实际的
不存在
将更快,因为SQL引擎不必实际计算所有行以与0进行比较,当找到一行时,它将立即返回

SELECT '1', 'VD', 'Janeiro',0,'0'

UNION 

SELECT '1', 'VD', 'Janeiro',0,'1' 
WHERE NOT EXISTS (select  1 ....where cond1...)

UNION

SELECT '1', 'AM', 'Janeiro',0,'2'
WHERE NOT EXISTS (select  1 ....where cond2...)

UNION

SELECT '1', 'VM', 'Janeiro',0,'3'
WHERE NOT EXISTS (select  1 ....where cond3...)

欢迎来到SO。请提供错误消息,如果可能,还请提供带有一些示例数据的表结构:最好是在sql FIDLE中。并且,您的sql语言我使用SQLSERVER 2012。错误是我无法执行,因为“UNION”用红色下划线。我认为这是一个语法错误错误是“UNION附近的语法不正确”
SELECT '1', 'VD', 'Janeiro',0,'0'

UNION 

SELECT '1', 'VD', 'Janeiro',0,'1' 
WHERE NOT EXISTS (select  1 ....where cond1...)

UNION

SELECT '1', 'AM', 'Janeiro',0,'2'
WHERE NOT EXISTS (select  1 ....where cond2...)

UNION

SELECT '1', 'VM', 'Janeiro',0,'3'
WHERE NOT EXISTS (select  1 ....where cond3...)