Попытка найти повторяющиеся значения в двух строках и двух столбцах-SQL Server



Используя SQL Server, я не DBA, но могу написать некоторые общие SQL. Я уже около часа выдергиваю себе волосы. Поиск я нашел несколько решений, но все они терпят неудачу из-за того, как работает GROUP BY.



У меня есть таблица с двумя столбцами, которые я пытаюсь проверить на наличие дубликатов:




  • userid

  • orderdate


Я ищу строки, которые имеют как userid, так и orderdate в качестве дубликатов. Я хочу показать эти строки.



Если я использую group by, я не могу вытащить ни одного другие данные, например идентификатор заказа, поскольку он не входит в предложение group by.

567   4  

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

    Ничего не найдено.