条件 UNION 错误

Error in 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
                          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

但我需要 UNION 是有条件的。 类似于:

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'

我试过了,但总是出现语法错误。

可以吗?

将您的条件移动到每个 UNIONSELECT 中的 WHERE 子句(您不能在 [=13= 之间放置 SELECT 以外的任何内容]).

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

UNION 

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

UNION

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

UNION

SELECT '1', 'VM', 'Janeiro',0,'3'
WHERE (select  count(*) ....where cond3...) = 0

此外,我从您的条件中注意到您正在检查该行是否存在,方法是 count = 0。用实际的 NOT EXISTS 替换它会更快,因为 SQL 引擎不必实际计算所有行以与 0 进行比较,它会在找到一行时立即 return。

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...)