[英]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.