尝试在两行和两列中查找重复值 - SQL Server
使用SQL Server,我不是DBA,但可以编写一些通用SQL。现在拉出我的头发大约一个小时。搜索我找到了几个解决方案,但是由于GROUP BY的工作原理,它们都失败了。尝试在两行和两列中查找重复值 - SQL Server
我有两列我试图重复检查表:
- 用户ID
- 订购日期
我在寻找同时具有userid
和orderdate
行作为重复。我想显示这些行。
如果我使用group by,我不能拉任何其他数据,例如订单ID,因为它不在group by子句中。
你可以在子查询中使用分组查询:
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)
您可以通过使用GROUPBY且得到重复。像这样:
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
)
是的,这会给你重复的,但他们也想要结果集中的所有列。好开始。 –
是的,谢谢你:)这是我开始的地方,但无法得到其余的列作为@WEI_DBA提到 – Tacos
你也可以使用一个窗口函数:
; With CTE as
(Select *
, count(*) over (partition by UserID, OrderDate) as DupRows
from MyTable)
Select *
from CTE
where DupRows > 1
order by UserID, OrderDate
感谢您的帮助! – Tacos
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
);
欢迎** ** SO ..添加以下数据问题:示例数据,预期结果和您迄今尝试的查询 –
https://*.com/help/how-to-ask –
了解如何提出问题。没有样本数据,表格结构,期望人们如何帮助您? – Eric