当条件存在时查询一组数据与另一组数据
Posted
技术标签:
【中文标题】当条件存在时查询一组数据与另一组数据【英文标题】:Query one set of data vs another when a condition exists 【发布时间】:2020-08-17 21:26:59 【问题描述】:我正在为我的要求寻找更好的 SQL 解决方案: 我有这种性质的数据
qty id sub-id counter
100 id1 id1 0
200 id2 id2 0
150 id2 id2-1 1
50 id2 id2-2 2
120 id3 id3 0
140 id4 id4 0
80 id4 id4-1 1
60 id4 id4-2 2
当counter = 0时,数据包含主数据。在某些情况下,有派生或子数据,它由counter > 0标识。子数据的qty列相加与主数据匹配。
需要编写一个查询,当不存在具有相同 id 且计数器 > 0 的记录时,获取计数器 = 0 的数据,否则获取计数器 > 0 的记录
我可以将其编写为 2 个单独的查询并使用 UNION - 是否可以简化查询并避免使用 UNION 语句?
【问题讨论】:
向我们展示您的工会查询。 “我可以将它写成 2 个单独的查询”。在哪里???我们没有看到一个查询。 【参考方案1】:你可以使用窗口函数:
select *
from (
select t.*, sum(counter) over(partition by id) sum_counter
from mytable t
) t
where sum_counter = O or counter > 0
【讨论】:
感谢您的回答 - 看起来这可能有效 - 会试一试 @Sajid:这个查询给你你想要的结果,不需要把它和别的东西结合起来。试一试。【参考方案2】:也可以与 LEAD 一起使用
;with lead_cte as (
select *, lead([counter]) over (partition by id order by qty desc) lead_counter
from some_table)
select * from lead_cte where lead_counter=0 or [counter]>0;
【讨论】:
以上是关于当条件存在时查询一组数据与另一组数据的主要内容,如果未能解决你的问题,请参考以下文章