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

问题描述

我正在为我的需求寻找更好的sql解决方案: 我有这种性质的数据

bigdumblist = [
    (0,{'product_id': 2,'product_uom_qty': 90}),(0,{'product_id': 3,'product_uom_qty': 5}),{'product_id': 5,'product_uom_qty': 69})
]

newlist = [i for i in bigdumblist if i[2]['product_id'] not in [2,3]]

当计数器= 0时,数据包含主数据。在某些情况下,存在派生数据或子数据,由计数器> 0标识。子数据的qty列加起来以匹配主数据。 / p>

需要编写一个查询,以在没有计数器> 0的相同ID的记录不存在时获取计数器= 0的数据,否则获取计数器> 0的记录

我能够将其编写为2个单独的查询并使用UNION-是否可以简化查询并避免使用UNION语句?

解决方法

您可以使用窗口功能:

select *
from (
    select t.*,sum(counter) over(partition by id) sum_counter
    from mytable t
) t
where sum_counter = O or counter > 0
,

也可以与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;