2016-11-15 2 views
0

моей структуры таблицы в БД SQL сервера, как показано нижеSQL для выбора повторяющихся операций

id field1 field2 field3 field4 field5 field6 field7 
1 x  10  abc  x  x  x  x 
2 x  10  abc  x1  x6  x2  x2 
3 x  10  xyz  x2  x6  x3  x3 
4 x  20  abc  x3  x7  x4  x4 
5 x  20  abc  x4  x8  x5  x5 
6 x  10  abc  x5  x9  x6  x6 

согласно моему БИЗУ логики, идентификаторы 1,2,4,5 как повторяющиеся заказам, поскольку они имеют одинаковые значения в field1, поле2 и поле3. какой запрос HIGH PERFORMANCE я пишу для получения только тех заказов, которые повторяются. то есть, я хочу вывода, как показано ниже

id field1 field2 field3 field4 field5 field6 field7 
1 x  10  abc  x  x  x  x 
2 x  10  abc  x1  x6  x2  x2 
4 x  20  abc  x3  x7  x4  x4 
5 x  20  abc  x4  x8  x5  x5 
  1. Нет заказов с идентификатором 3 и 6, поскольку они являются уникальными.
  2. все поля должны быть на выходе

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

Кроме того, эта таблица содержит миллионы записей, поэтому не хотите использовать временные таблицы и группы по командам. Я думаю, мне нужно использовать раздел.

Спасибо за помощь

ответ

1

Вы можете использовать COUNT OVER:

WITH Cte AS(
    SELECT *, 
     cnt = COUNT(*) OVER(PARTITION BY field1, field2, field3) 
    FROM tbl 
) 
SELECT 
    id, field1, field2, field3, field4, field5, field6, field7 
FROM Cte 
WHERE cnt > 1 
0
SELECT * FROM #Table T JOIN (SELECT field1 , field2 , field3 
FROM #Table GROUP BY field1 , field2 , field3 HAVING COUNT(*) > 1) A ON A.field1 = T.field1 AND A.field2 = T.field2 AND A.field3 = T.field3 
Смежные вопросы