当条件存在时查询一组数据与另一组数据

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;

【讨论】:

以上是关于当条件存在时查询一组数据与另一组数据的主要内容,如果未能解决你的问题,请参考以下文章

主键和外键的作用

主键和外键的作用

仅当记录不存在时才将 SQL 插入表中[重复]

SELECT Oracle 中一组条件的查询数据

excel如何查询一组数据在另一个表格中是不是存在同一组数据?

SQL查询 - 按另一列排序一组列