Sql 根据特定条件在列中查找重复值
我有一个表,其中包含针对特定帐户的操作,这些操作被赋予一组编号的操作,并在该集合中获得一个唯一的顺序编号。我们遇到了一个问题,不知何故其中一个唯一的数字被复制了,我们想检查更多可能发生这种情况的例子。这张桌子看起来有点像这样:Sql 根据特定条件在列中查找重复值,sql,sql-server,tsql,duplicates,Sql,Sql Server,Tsql,Duplicates,我有一个表,其中包含针对特定帐户的操作,这些操作被赋予一组编号的操作,并在该集合中获得一个唯一的顺序编号。我们遇到了一个问题,不知何故其中一个唯一的数字被复制了,我们想检查更多可能发生这种情况的例子。这张桌子看起来有点像这样: Account | Action Set | Action No | Action Code --------|------------|-----------|------------ 001 | 1 | 1 | GEN
Account | Action Set | Action No | Action Code
--------|------------|-----------|------------
001 | 1 | 1 | GEN
001 | 1 | 2 | PHO
001 | 1 | 3 | RAN
001 | 1 | 3 | GEN
002 | 1 | 1 | GEN
002 | 1 | 2 | PHO
002 | 1 | 3 | RAN
我尝试了在这里搜索到的各种东西,但找不到任何适合我具体情况的东西
对于任何给定的帐号,我想找出在一个操作集中,同一操作编号被多次使用的位置。我还需要返回整行,而不仅仅是计算有多少行。
从上面的例子中,我希望看到这些结果,相同的帐户,相同的操作集,相同的操作编号
Account | Action Set | Action No | Action Code
--------|------------|-----------|------------
001 | 1 | 3 | RAN
001 | 1 | 3 | GEN
我会发布到目前为止我已经尝试过的内容,但老实说,到目前为止我编写的代码的范围是:
SELECT
短暂性脑缺血发作
标记根据您的描述,您可以使用
存在
:
select t.*
from t
where exists (select 1
from t t2
where t2.account = t.account and
t2.actionset = t.actionset and
t2.actionno <> t.actionno
);
试试这个
Select account,actionset,actioncode,actionno
from table
where (account,actionset)
IN
(
Select account,actionset from table
group by account,actionset
having count(distinct actionno)>1
)
group by account,actionset,actioncode,actionno
请找到我从表中获取重复记录的解决方案
SELECT [ActionSet],ActionCode,[ActionNo]
FROM
(
SELECT *,ROW_NUMBER()OVER(PARTITION by [ActionSet],[ActionNo] ORDER BY
[ActionNo]) as rnk FROM [dbo].[ActionAccount]
) t where t.rnk>1
谢谢。您应该编辑问题并提供您想要查找的示例。您的行似乎不符合标准。这是一个非常好的开始@GordonLinoff——我知道你已经回答了,你的解决方案也起了作用,但我已经用你的建议更新了原来的问题,以防它能帮助其他人解决同样的问题。谢谢。谢谢你的回复,行动编号应该不同,但要努力确定它们在哪里是相同的。您的第二个查询对我不起作用,只返回数据库中的所有行。但是,我确实添加了一个附加项抱歉,太早按enter键,在WHERE子句中添加了一个附加项,为我修复了它,我已编辑了您的响应。感谢您的响应,但它不喜欢WHERE子句位于括号中(帐户,操作集)--在“,'删除括号,然后选中@MarkJeffriesI尝试删除括号,但没有解决问题。我得到一个错误:一个非布尔类型的表达式,在一个预期条件的上下文中指定,靠近','。
SELECT [ActionSet],ActionCode,[ActionNo]
FROM
(
SELECT *,ROW_NUMBER()OVER(PARTITION by [ActionSet],[ActionNo] ORDER BY
[ActionNo]) as rnk FROM [dbo].[ActionAccount]
) t where t.rnk>1