Использование DISTINCT для поиска уникальных значений одного столбца при отображении нескольких столбцов - PullRequest
2 голосов
/ 17 марта 2019

Я хочу использовать оператор SELECT DISTINCT для фильтрации результатов моей таблицы результатов.Я пытаюсь отобразить названия продуктов (ProductName), которые имеют уникальный процент скидки (DiscountPercent).Таким образом, он отображает только продукты с уникальным процентом скидки.

Мой код выглядит следующим образом:

select    
    p1.ProductName, p2.DiscountPercent
from
    Products p1
right join
    (select distinct DiscountPercent 
     from Products) p2 on p1.DiscountPercent = p2.DiscountPercent
order by 
    ProductName --I need to have it ordered by ProductName

Возвращает таблицу;однако в таблице все еще есть дублирующая информация в столбце DiscountPercent.Это то, от чего я пытаюсь избавиться.

Пожалуйста, имейте в виду, что я новичок в SQL Server и программировании в целом.Любая помощь будет принята с благодарностью!

(Я искал ответ на этот вопрос несколько раз, внедряя решения из других вопросов; однако их решения всегда отображали мою таблицу результатов только с колонкой ProductName.)

1 Ответ

1 голос
/ 17 марта 2019

Отдельные проверки для абсолютно уникальных записей, т.е. он будет проверять ProductName и DiscountPercent на другие записи и будет отфильтровывать результаты, которые соответствуют обоим значениям.Ваш JOIN не будет работать, потому что он будет сопоставлять записи из одной таблицы с максимально возможным количеством других таблиц.

Вот решение, основанное на аналогичный вопрос :

;WITH a AS (
    SELECT ProductName, DiscountPercent,
           ROW_NUMBER() OVER (PARTITION BY DiscountPercent ORDER BY ProductName ASC) AS RowNumber
     FROM Products
)
SELECT a.ProductName, a.DiscountPercent
 FROM a
 WHERE a.RowNumber = 1

По сути, ROW_NUMBER() OVER (PARTITION BY DiscountPercent ORDER BY ProductName ASC) AS RowNumber считает повторные значения в DiscountPercent.WHERE a.RowNumber = 1 сообщает запросу, чтобы получить первый найденный.

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