SQL-запрос повторяет те же результаты - PullRequest
1 голос
/ 28 ноября 2011

Я не могу понять, как удалить дубликаты результатов из моего запроса в 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

Ответы [ 4 ]

3 голосов
/ 28 ноября 2011

В ваших результатах нет повторяющихся записей, значения ComponentID делают строки разными.Удаление ComponentID из результирующего набора сделает строки кажущимися более похожими, а DISTINCT должен удалить дубликаты кажущихся .Но у вас, вероятно, есть более фундаментальная проблема: либо у вас есть несколько записей для разных компонентов, либо вы присоединяете дополнительную таблицу к своим результатам.

2 голосов
/ 28 ноября 2011

Вы можете получить отдельные строки с помощью Общего выражения таблицы в SQL 2008: вы можете обновить 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
1 голос
/ 28 ноября 2011

Удалите ComponentID из SELECT, и это устранит видимые дубликаты.

0 голосов
/ 28 ноября 2011

Ваш CompoentID хранится в таблице ProductSupplier? возможно, у вас есть повторяющиеся записи в таблице ProductSupplier, так как у вас есть другой ComponentID, но та же самая цена за единицу.

Вы должны уточнить больше, если это на самом деле распространенный бизнес-сценарий в вашем приложении, или он может быть идентифицирован с даты вступления в силу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...