2015-09-21 3 views
0

У меня есть следующий SQL, который работает и возвращает продукты с повторяющимися именами, а столбец rownum - количество раз, сколько раз это имя появляется.SQL Server 2008 - ROWNUMBER OVER - фильтрация результата

Добавление where rownum > 1 в конце дает мне только дубликаты.

SELECT * 
FROM 
    (SELECT 
     id, productname, 
     ROW_NUMBER() OVER (PARTITION BY productname 
          ORDER BY productname) Rownum 
    FROM products 
    GROUP BY id, productname) result 

ТРЕБОВАНИЕ

Мне нужно составить список продуктов, в которых, если столбец ROWNUM имеет значение больше, чем один, я хочу, чтобы увидеть все строки, относящиеся к этому продукту, сгруппированных по столбцу имя ,

Если значение rownum для продукта равно 1, и не имеет значения больше одного (так что не дублируется), я не хочу видеть эту строку.

Так, например, если «Голубой зонт» появляется три раза, я хочу, чтобы увидеть результат этого продукта, как:

ID Name   Rownum 
35 Blue umbrella 1 
41 Blue umbrella 2 
90 Blue umbrella 3 

Как бы я идти о достижении этой цели, пожалуйста?

+0

На самом деле то, что ваш ожидаемый результат? Нужно только показывать строку с 'rownum = 1'? – Wanderer

+0

привет, нет, если какая-либо строка имеет число больше 1 в столбце rownum, например 3, я хочу видеть и другие две связанные строки. поэтому в основном я хочу видеть все дубликаты рядом друг с другом. я надеюсь, что это разъяснит его. – Nick

ответ

2

Изменение Row_NUmber Over to Count(1) Over и select where the count is greater than 1 и удалить группу по

SELECT * from (Select id,productname, 
     Count(1) OVER(Partition By productname ORDER by productname) Rownum 
      FROM products 
      ) result 
     WHERE Rownum > 1 
+1

Для удобства чтения, вероятно, переименуйте вычисленный столбец rownum от rownum к чему-то более близкому к тому, что он фактически содержит :) – larsts

+0

Я попробовал это и получил ошибку «Функции Parallel Data Warehouse (PDW) не включены». :(спасибо за ваш ответ – Nick

Смежные вопросы