繁体   English   中英

使用特定条件排除记录

[英]Excluding Records using specific conditions

我有一张如下表

ID 类型 部分
CD1 服务 一个
CD1 服务 无效的
CD1 服务
CD1 销售量 一个
CD2 服务 无效的
CD2 销售量
CD3 服务 一个
CD3 服务 无效的

输出要求:

ID 类型 部分
CD1 服务 一个
CD1 服务
CD1 销售量 一个
CD2 服务 无效的
CD2 销售量
CD3 服务 一个

解释:例如 CD1 的服务类型为 A、B,零件为 null,CD2 的服务类型为零件,零件只有 null。 由于 CD1 具有 A、B 作为一部分,因此必须排除空值记录,并且具有服务作为类型的 CD2 不包含除 null 以外的任何值,因此不应排除它。

类似地,CD3 将 Service 作为 Type,A 和 null 作为 Part。 由于 A 存在,必须排除空值记录。

这可以使用SQL来实现吗?

提前致谢

您可以使用ROW_NUMBER窗口函数分配排名,其中将为空值分配最小值。 然后,您可以从表中选择值不为 null 或排名为 1 的所有行(如果在第一个位置找到 null,则意味着它是 ID 和 Type 组合的唯一值):

WITH cte AS (
    SELECT *, 
           ROW_NUMBER() OVER(PARTITION BY ID, Type 
                             ORDER     BY Part DESC) AS rn
    FROM tab
)
SELECT ID,
       Type, 
       Part
FROM cte
WHERE Part IS NOT NULL 
   OR rn = 1

在这里试试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM