sql - SQL - 加入条件 CASE - 如何制作 - 如果满足条件,则停止满足下一个条件
问题描述
收银员可以向字段 C40_DATA 输入 3 个不同的值(9962**********、id_invoice、web_order)
我想要的结果是:
- 如果来自 C40_DATA 的 substr 包含 p.id_invoice => 显示这些行
- 如果 C40_contains 包含 id_web_order 或 id_incvoice => 显示这些行 -> 这意味着点 1 始终显示,但点 2 -> 不显示两者,如果存在 id_web_order,则显示并停止,如果不存在,则查找 id_incvoice
当我创建这个(如下)时,结果包含所有 3 个,但我需要 1 +(如果存在 2,如果不存在 3)
select * from web_data p
inner join POS_DATA re on
(case
when substr(re.C40_DATA,5,8) = p.id_invoice and substr(re.C40_DATA,1,4) ='9962' then 1 else
(case
when re.C40_DATA = p.id_web_order and p.d_mnozstvi < '0' then 1 else
(case
when re.C40_DATA = p.id_invoice and p.d_mnozstvi < '0' then 1 else 0 END)
END)
END=1)
您能否帮助如何在 JOIN 中进行 contitions - 如果满足一个条件,则停止并且找不到下一个条件?
谢谢,
解决方案
您尝试的查询会以这种方式更好地编写:
select * from web_data p
inner join POS_DATA re on
substr(re.C40_DATA, 5, 8) = p.id_invoice and substr(re.C40_DATA, 1, 4) = '9962'
or re.C40_DATA = p.id_web_order and p.d_mnozstvi < '0'
or re.C40_DATA = p.id_invoice and p.d_mnozstvi < '0'
如果您真的需要将其作为case
表达式执行,则可以按如下方式完成。案件按顺序排列:
case
when substr(re.C40_DATA, 5, 8) = p.id_invoice and substr(re.C40_DATA, 1, 4) ='9962' then 1
when re.C40_DATA = p.id_web_order and p.d_mnozstvi < '0' then 1
when re.C40_DATA = p.id_invoice and p.d_mnozstvi < '0' then 1
end = 1
至于只匹配一个条件,我认为你想要这样的东西:
with data as (
select *,
case
when re.C40_DATA = '9962' + p.id_invoice then 1
when re.C40_DATA = p.id_web_order and p.d_mnozstvi < '0' then 2
when re.C40_DATA = p.id_invoice and p.d_mnozstvi < '0' then 3
end as match_rank,
min(case
when re.C40_DATA = '9962' + p.id_invoice then 1
when re.C40_DATA = p.id_web_order and p.d_mnozstvi < '0' then 2
when re.C40_DATA = p.id_invoice and p.d_mnozstvi < '0' then 3
) over (partition by p.id_invoice, p.web_order) as min_match_rank
from web_data p
inner join POS_DATA re on
re.C40_DATA = '9962' + p.id_invoice
or re.C40_DATA = (p.id_web_order, p.id_invoice) and p.d_mnozstvi < '0'
)
select * from data where match_rank = min_match_rank;
我冒昧地重写了您的一些条件,以防这些选项对您有用。另外,我不确定 < '0'
应该是什么意思。最后,我不确定要划分哪些值,因为我不了解 和 之间的id_invoice
关系id_web_order
。
推荐阅读
- python - scikit-learn 模型的预测是线程安全的吗?
- java - 带可选参数的 Springboot 动态查询
- node.js - 如何在 Sequelize / Node.js 中设置沙盒帐户?
- angular - 在 Angular Material 中为粗体文本设置特定字体
- angular - 对属性的更改未出现在真实设备上的模板中
- javascript - 用 '&' 字符分割字符串,如果它是字符串中的第一个则忽略它
- android - 如何在颤振中更新 settings.gradle 文件
- javascript - 如何在 React 中创建动态嵌套手风琴
- java - Spring Boot - 意外的 extShutdownHook
- haskell - 如何将类型族约束为显示