Попытка найти повторяющиеся значения в двух строках и двух столбцах-SQL Server
Используя SQL Server, я не DBA, но могу написать некоторые общие SQL. Я уже около часа выдергиваю себе волосы. Поиск я нашел несколько решений, но все они терпят неудачу из-за того, как работает GROUP BY.
У меня есть таблица с двумя столбцами, которые я пытаюсь проверить на наличие дубликатов:
- userid
- orderdate
Я ищу строки, которые имеют как userid, так и orderdate в качестве дубликатов. Я хочу показать эти строки.
Если я использую group by, я не могу вытащить ни одного другие данные, например идентификатор заказа, поскольку он не входит в предложение group by.
4 ответов:
Вы можете использовать сгруппированный запрос в подзапросе:
SELECT * FROM mytable a WHERE EXISTS (SELECT userid, orderdate FROM mytable b WHERE a.userid = b.userid AND a.orderdate = b.orderdate GROUP BY userid, orderdate HAVING COUNT(*) > 1)
Можно также использовать оконную функцию:
; With CTE as (Select * , count(*) over (partition by UserID, OrderDate) as DupRows from MyTable) Select * from CTE where DupRows > 1 order by UserID, OrderDate
Вы можете получить дубликаты, используя groupby и having. Вот так:
SELECT userid,orderdate, COUNT(*) FROM yourTable GROUP BY userid,orderdate HAVING COUNT(*) > 1Правка:
SELECT * FROM yourTable WHERE CONCAT(userid,orderdate) IN ( SELECT CONCAT(userid,orderdate) FROM yourTable GROUP BY userid,orderdate HAVING COUNT(*) > 1 )
SELECT * FROM myTable WHERE CAST(userid as Varchar) + '/' + CONVERT(varchar(10),orderdate,103) In ( SELECT CAST(userid as Varchar) + '/' + CONVERT(varchar(10),orderdate,103) FROM myTable GROUP BY userid , orderdate HAVING COUNT(*) > 1 );
Comments