sql - 条件 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'
我试过了,但我总是遇到语法错误。
有可能这样做吗?
解决方案
将您的条件移动到each 中的一个WHERE
子句(您不能放置除between之外的任何内容)。UNION
SELECT
SELECT
UNION
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 进行比较,它会在找到行时立即返回。
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...)
推荐阅读
- html - 如何更改 HTML 列表项的颜色(颜色:firebrick 不起作用
- elasticsearch - 从 Elasticsearch 5.6.x 升级到 6.4.0 后出现 index_out_of_bounds_exception 错误
- swift - 视图被合并而不是单独显示
- python - 使用 pipenv 安装“确认 ssl 证书时出现问题”
- .net - Rhino Mock 与 .NetCore 的兼容性
- html - iframe 似乎打破了 css 布局
- composer-php - 如何让我的作曲家使用 Drupal 8
- matlab - 在 GUI 中带有附加参数的 MATLAB addlistener
- dart - 如何在 Dart 中读取字节数组数据?
- python - Python Pandas:如何在包含键列表的列上使用字典来创建值列表的另一列