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