2010-03-04 53 views
0

我有两列(ID和Active)Access表中包含的数据如下:访问 - 选择不同的记录,其中只有一列是不同的

ID | Active 
------------ 
123 | 0 
124 | 0 
125 | 0 
123 | 1 
314 | 1 
948 | 1 

我想选择有鲜明的记录唯一的ID(只存在一次,不仅仅是它们第一次存在),但我也需要Active值。如果我做

SELECT DISTINCT ID from table1 

我得到唯一的ID,但不是工作表。它还返回123,这在表中并不是唯一的。如果我做的:

SELECT DISTINCT * from table1 

我得到重复的ID,如果他们有不同的活动值。我需要一个查询来获取唯一的ID及其关联的Sheet值。它会返回以下内容:

ID | Active 
------------ 
124 | 0 
125 | 0 
314 | 1 
948 | 1 

我是否需要将它们放到两个不同的表中并进行外连接? Active是永远只0或1

回答

5

使用此:

SELECT * 
FROM table1 
WHERE Id IN (SELECT Id FROM table1 GROUP BY Id HAVING COUNT(Id)=1) 
+0

这将完全离开123,而选择不同将包括它。 – Fionnuala 2010-03-04 00:59:35

+0

我想省略123 - 它应该只有唯一的ID – 2010-03-04 01:03:33

+1

@David:我不明白。你说你想“选择具有唯一ID的不同记录”;这就是我提出的答案所做的,按照您在示例返回数据中请求的方式返回id为124,125,314和948的行。它不返回id为123的行,因为该id出现两次,即它不是唯一的。我能帮你吗? – CesarGon 2010-03-04 17:28:34

1

对于其他人,如果你想至少有一个记录返回每个ID,此后省略任何重复。类似CesarGon的子查询会工作的查询,只要你想为活动的第一个或最后一个结果:

SELECT ID, First(table1.Active) as Active FROM table1 GROUP BY ID; 

这将让你想你想:

ID | Active 
------------ 
123 | 0 
124 | 0 
125 | 0 
314 | 1 
948 | 1 

如果你想为活动的最后一个值:

SELECT ID, Last(table1.Active) as Active FROM table1 GROUP BY ID; 

,将让你:

ID | Active 
------------ 
123 | 1 
124 | 0 
125 | 0 
314 | 1 
948 | 1 
相关问题