簡體   English   中英

查找與 1 個非唯一列關聯的列的唯一組合

[英]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 與任何其他行不同。 在這種情況下, 958103498239不同,所以它應該是成功的。

對於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 BYHAVING

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_RANKMAX模擬它

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;

db<>小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM