根据特定条件在列中查找重复值

时间:2016-10-20 11:17:54

标签: sql sql-server tsql duplicates

我有一个表格,其中包含针对特定帐户的操作,操作会给出一组编号的操作,并且在该SET中,它们会获得唯一的序列号。我们遇到了一个问题,其中一个独特的数字已被复制,并想检查更多可能发生这种情况的例子。该表看起来有点像这样:

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

我尝试过通过此处搜索找到的各种内容,但找不到符合我具体情况的任何内容。

对于任何给定的帐号,我想在一个Action SET中找到多次使用相同操作号的位置。我还需要返回整行,而不仅仅是有多少行。

从上面的示例中,我希望看到这些结果,相同的帐户,相同的操作集,相同的操作号

Account | Action Set | Action No | Action Code
--------|------------|-----------|------------
  001   |     1      |     3     |    RAN
  001   |     1      |     3     |    GEN

我会发布到目前为止我尝试过的内容但老实说到目前为止我编写的代码的范围是:

SELECT

TIA

标记

3 个答案:

答案 0 :(得分:0)

根据您的说明,您可以使用exists

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 t.*
from t
where (select count(*)
       from t t2
       where t2.account = t.account and
             t2.actionset = t.actionset 
      ) >= 2;

答案 1 :(得分:0)

尝试这个

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

答案 2 :(得分:0)

Please find my solution for Getting duplicate records from table.

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

Thanks .