通过抛出查询结果来重复值和组

时间:2014-06-12 13:53:37

标签: sql-server

我正在尝试执行查询并遇到一些问题。目标是找到制造商(idPub)正在使用的特定字段(Upc)的所有重复值。一个例子是制造商A使用upc 1010而制造商B也占用upc 1010.该数据存储在一个表中。到目前为止,我已经在下面提出了这个问题......

USE dbIdwWhseLC

SELECT tbItem.sUpc, COUNT(*) AS NumberofDups
FROM tbItem
WHERE sUpc IS NOT NULL
GROUP BY sUpc
HAVING COUNT(*) > 1
ORDER BY COUNT(*)

查询显示正确的数据,直到upc数字和计数,但是当尝试在查询中抛出制造商字段时,我也必须按制造商字段进行分组,这会导致结果丢失。我正在尝试查询返回如下所示的数据......

Upc         idPub

1010        A

1010        B

任何建议都将不胜感激。感谢。

2 个答案:

答案 0 :(得分:0)

您想要找到upc在具有多个条目的UPC列表中的所有条目,所以......

select sUpc, idPub
from tbItem
where sUpc in 
(
    Select tbItem.sUpc
    From tbItem
    Where sUpc is not null
    Group by sUpc
    Having COUNT(*)>1
)

答案 1 :(得分:0)

您必须加入主表,如下所示:

WITH Duplicates AS
(
Select tbItem.sUpc
,COUNT(*) As NumberofDups
From tbItem
Where sUpc is not null
Group by sUpc
Having COUNT(*)>1
)
SELECT
D.sUpc
,TI.idPub
,M.[name]
FROM
Duplicates AS D
INNER JOIN
tblItem AS TI
ON
D.sUpc = TI.sUpc
INNER JOIN 
tbMfrReporting AS M
ON
TI.nIdPub = M.nIdPub 

上面的Duplicates语句称为CTE。

我希望有所帮助。

编辑:更新查询以根据评论添加更多表