2013-09-24 75 views
2

在Ms.Access 2010中,我有一个类似的查询表,其中显示重复记录。问题是,即使我有唯一的ID,但其中一个字段与其他行的数据不同,因为我在此查询中组合了两个独立的表。我只想为每个ID显示一行并删除其他行。我选哪一排并不重要。见下:从重复记录中选取每个唯一ID一行

ID - NAME - FAVCOLOR 
1242 - John - Blue 
1242 - John - Red 
1378 - Mary - Green 

我想只选择任何具有相同ID的行。只要我为每个ID显示一行都是重要的,我选择哪一行并不重要。

ID - NAME - FAVCOLOR 
1242 - John - Red 
1378 - Mary - Green 
+0

什么是您的实际sql查询检索行此刻? – legrandviking

+0

SELECT ID,NAME,FAVCOLOR FROM TABLE1; UNION ALL SELECT ID,NAME,FAVCOLOR FROM TABLE2; – user2430036

回答

2

使用当前查询中的SQL作为子查询,然后使用GROUP BYIDNAME。你可以检索最低FAVCOLOR,因为你只需要一个而不关心哪一个。

SELECT sub.ID, sub.NAME, Min(sub.FAVCOLOR) 
FROM 
    (
     SELECT ID, [NAME], FAVCOLOR 
     FROM TABLE1 
     UNION ALL 
     SELECT ID, [NAME], FAVCOLOR 
     FROM TABLE2 
    ) AS sub 
GROUP BY sub.ID, sub.NAME; 

NAME是一个reserved word。将该名称括起来或用表名或别名加上前缀以避免混淆数据库引擎。

0

尝试选择没有ALL参数的联合并查看是否得到期望的结果。

新的查询看起来像

“SELECT ID,姓名,FAVCOLOR FROM表1; UNION SELECT ID,姓名,FAVCOLOR FROM TABLE2;”

0

如果您只是想要这些ID,为什么查询中的颜色?也许我错过了一些东西。 我可以建议的唯一的事情是使用一些聚合函数(最小,最大)来获得一种颜色。

Select 
    id, 
    name, 
    max(favcolor) 
    from (
    (select * from table1) t1 
    union (select * from table2) t2)t 
    group by 
    id, 
    name 
+0

报告需要按颜色排序这就是为什么需要颜色,反正我现在会试试看,看看它是否工作。 – user2430036