Group By和Hading with Distinct

时间:2013-09-22 10:09:45

标签: sql sql-server

我有ItemDetails表,其中包含商品和供应商信息。项目供应商关联有重复记录 - 在我的方案中没问题。

现在,我需要找出存在多个不同供应商的商品。这有什么SQL查询?我正在寻找多种方法。

以下查询不正确。它列出了'A1'和'A2'。正确的查询应仅返回“A2”。

SELECT Item FROM @ItemDetails 
GROUP BY Item
HAVING COUNT(*) > 1

DECLARE @ItemDetails TABLE (MyPrimaryKey INT, Item VARCHAR(5), VendorID VARCHAR(5))
INSERT INTO @ItemDetails VALUES (1, 'A1', 'V1')
INSERT INTO @ItemDetails VALUES (2, 'A1', 'V1')
INSERT INTO @ItemDetails VALUES (2, 'A2', 'V1')
INSERT INTO @ItemDetails VALUES (2, 'A2', 'V2')

1 个答案:

答案 0 :(得分:1)

这个想法是收集由单个供应商生产的产品,然后过滤掉其他产品

select a.item 
from ItemDetails as a 
where a.item not in (
   select b.item 
   from ItemDetails as b 
   group by b.Item, b.VendorId
   having count(*) = 1
)

但一分钟后我找到了最简单的方法

select item 
from ItemDetails
group by Item
having count(distinct VendorId) > 1