选择不在dup checker查询中的其他列

时间:2014-06-02 20:38:40

标签: sql ms-access

在Access中,我根据28列识别重复记录。我还想选择一个非重复的列,但无法弄明白。

tbl_1:

bud_line | fund | name      | amt
123      |  ABC |  BOB      | $8
123      |  ABC |  BOB ROSS | $8
321      |  ABC |  BOB      | $8
321      |  AAA |  BOB      | $8
321      |  AAA |  BOB      | $20
321      |  XXX | JOHN      | $10
321      |  XXX | JOHN      | $10

我想要输出的唯一行是:

123 | ABC | BOB      | $8
123 | ABC | BOB ROSS | $8
321 | XXX | JOHN     | $10

我正在使用如下查询:

select bud_line, fund, amt
from tbl_1
group by bud_line, fund, amt
having count(*) > 1

我得到了我的副本,但我没有得到名字BOB& BOB ROSS识别它们。

我尝试在select中添加名称,但是它出错了,因为它不是聚合函数的一部分。

1 个答案:

答案 0 :(得分:1)

在Access中,您可以通过加入原始表来执行此操作:

select t.*
from tbl_1 as t inner join
     (select bud_line, fund, amt
      from tbl_1
      group by bud_line, fund, amt
      having count(*) > 1
     ) as tt
     on t.bud_line = tt.bud_line and t.fund = tt.fund and t.amt = tt.amt
order by bud_line, fund, amt;

如果你在每一行都有一个唯一的id,你可以用一个exists子句来做这个,它可以使用索引并且更快:

select t.*
from tbl_1 as t
where exists (select 1
              from tbl_1 as tt
              where t.bud_line = tt.bud_line and t.fund = tt.fund and t.amt = tt.amt and
                    t.id <> tt.id
             );