我无法弄清楚如何从SQL Server中的查询中删除重复的结果。我尝试将ProductID
更改为另一个表中的一个,但这不起作用。任何帮助将不胜感激。
SELECT DISTINCT M.ProductID,P.ProductDesc,ComponentID,ComponentQty,UnitPrice
FROM Product P, Manufactured M, ProductSupplier PS
WHERE P.ProductID=PS.ProductID
AND P.ProductID=M.ProductID
AND upper(P.ProductDesc) LIKE upper('Hack Saw%')
OR upper(P.ProductDesc) LIKE upper('saw blade%')
OR upper(P.ProductDesc) LIKE upper('saw handle%')
ORDER BY M.ProductID ASC
产生的输出是:
ProductID ProductDesc ComponentID ComponentQty UnitPrice
--------- ----------- ----------- ------------ ---------
3 Hack Saw 26 1 27.0000
3 Hack Saw 27 1 27.0000
3 Saw Blade 26 1 2.2500
3 Saw Blade 27 1 2.2500
3 Saw Handle 26 1 3.1700
3 Saw Handle 27 1 3.1700
11 Saw Blade 12 1 2.2500
11 Saw Blade 31 1 2.2500
11 Saw Handle 12 1 3.1700
11 Saw Handle 31 1 3.1700
22 Saw Blade 5 1 2.2500
22 Saw Blade 20 1 2.2500
22 Saw Blade 21 1 2.2500
22 Saw Handle 5 1 3.1700
22 Saw Handle 20 1 3.1700
22 Saw Handle 21 1 3.1700
答案 0 :(得分:3)
结果中没有重复记录,ComponentID值使行不同。从结果集中删除ComponentID将使行显示更相似,并且DISTINCT应删除明显的重复项。但是,您可能有一个更基本的问题,要么您有不同组件的多个条目,要么您正在为结果加入一个额外的表。
答案 1 :(得分:2)
您可以在SQL 2008中使用Common Table Expression获取不同的行:您可以将PARTITION BY
更新为仅包含您在考虑唯一记录时要使用的列。
WITH WithRowNumber AS
(
SELECT M.ProductID,P.ProductDesc,ComponentID,ComponentQty,UnitPrice
, ROW_NUMBER() OVER (PARTITION BY M.ProductID, P.ProductDesc, ComponentID
, ComponentQty, UnitPrice ORDER BY M.ProductID ASC) AS RowNumber
FROM Product AS P
INNER JOIN Manufactured AS M ON P.ProductID = M.ProductID
INNER JOIN ProductSupplier AS PS ON P.PruductId = PS.ProductID
WHERE UPPER(P.ProductDesc) LIKE UPPER('Hack Saw%')
OR UPPER(P.ProductDesc) LIKE UPPER('saw blade%')
OR UPPER(P.ProductDesc) LIKE UPPER('saw handle%')
)
SELECT wrn.ProductID, wrn.ProductDesc, wrn.ComponentID, wrn.ComponentQty
, wrn.UnitPrice
FROM WithRowNumber AS wrn
WHERE wrn.RowNumber = 1
答案 2 :(得分:1)
从SELECT中删除 ComponentID ,它将消除明显的重复。
答案 3 :(得分:0)
您的CompoentID是否存储在ProductSupplier表中?可能是您在ProductSupplier表中有重复的条目,因为您有不同的ComponentID但数量/单位价格相同。
如果这实际上是您的应用程序中的常见业务场景,或者可能从生效日期开始识别,则必须澄清更多信息。