簡體   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