[英]Finding unique combination of columns associated with 1 non-unique column
這是我的桌子:
物品編號 | 項目名 | 項目批次 | 追蹤號碼 |
---|---|---|---|
一個 | 包 | 1 | 498239 |
一個 | 包 | 1 | 498239 |
一個 | 包 | 1 | 958103 |
b | 紙 | 2 | 123444 |
b | 紙 | 2 | 123444 |
我正在嘗試查找具有非唯一 TrackingNumber 的 ItemID + ItemName + ItemBatch 的出現。 因此,在上面的示例中,出現 3 次a bag 1
並且這些行中至少有 1 行的 TrackingNumber 與任何其他行不同。 在這種情況下, 958103
與498239
不同,所以它應該是成功的。
對於b paper 2
,TrackingNumber 對於所有相應的行都是唯一的,因此我們忽略了這一點。 是否有一個查詢可以提取具有 3 個相同字段和 1 個非唯一字段的列組合?
還有一個選擇:
SELECT *
FROM tab
WHERE ItemBatch IN (SELECT ItemBatch
FROM tab
GROUP BY ItemBatch, TrackingNumber
HAVING COUNT(TrackingNumber) = 1)
此查詢查找僅出現一次的(ItemBatch, TrackingNumber)
組合,然后獲取與其ItemBatch
值對應的所有行。
在這里試試。
您可以使用GROUP BY
和HAVING
SELECT
t.ItemID,
t.ItemName,
t.ItemBatch,
COUNT(*)
FROM YourTable t
GROUP BY
t.ItemID,
t.ItemName,
t.ItemBatch
HAVING COUNT(DISTINCT TrackingNumber) > 1;
或者,如果您想要每一行,您可以使用窗口函數。 您不能在窗口函數中使用COUNT(DISTINCT
,但可以使用DENSE_RANK
和MAX
模擬它
SELECT
t.*
FROM (
SELECT *,
Count = MAX(dr) OVER (PARTITION BY t.ItemID, t.ItemName, t.ItemBatch)
FROM (
SELECT *,
dr = DENSE_RANK() OVER (PARTITION BY t.ItemID, t.ItemName, t.ItemBatch ORDER BY t.TrackingNumber)
FROM YourTable t
) t
) t
WHERE t.Count > 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.