我有一張如下表
| 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來實作嗎?
提前致謝
uj5u.com熱心網友回復:
您可以使用視窗函式分配排名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
在這里試試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484579.html
上一篇:使用特定條件排除記錄
下一篇:MySQL從多個表中獲取資料
