在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中添加名称,但是它出错了,因为它不是聚合函数的一部分。
答案 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
);