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