按一个不同的列选择一个记录子组

时间:2011-07-08 18:39:03

标签: sql tsql unique distinct

很抱歉,如果之前已经回答过,但所有相关问题似乎都不符合我的目的。

我的表格如下所示:

ID  POSS_PHONE    CELL_FLAG
=======================
1   111-111-1111  0
2   222-222-2222  0
2   333-333-3333  1
3   444-444-4444  1

我想只为插入选择不同的ID值,但我不关心从重复项中提取哪个特定ID。

例如(有效的SELECT):

1   111-111-1111  0
2   222-222-2222  0
3   444-444-4444  1

在我拥有CELL_FLAG专栏之前,我只是使用聚合函数:

SELECT ID, MAX(POSS_PHONE)
FROM TableA
GROUP BY ID    

但我不能这样做:

SELECT ID, MAX(POSS_PHONE), MAX(CELL_FLAG)...

因为我会在行内失去诚信,对吗?

我已经看过一些使用CTE的类似例子,但再一次,没有什么比较适合。

所以这可能是CTE或某种类型的自连子查询可以解决的吗?我现在在一个街区,所以我看不到任何其他解决方案。

1 个答案:

答案 0 :(得分:2)

只需在子查询中获取聚合并加入其中:

SELECT a.ID, sub.Poss_Phone, CELL_FLAG
FROM TableA as a
INNER JOIN (SELECT ID, MAX(POSS_PHONE) as [Poss_Phone]
            FROM TableA
            GROUP BY ID) Sub
    ON Sub.ID = a.ID and SUB.Poss_Phone = A.Poss_Phone

这样可以保持非聚合字段之间的完整性,但仍会按MAX(Poss_Phone) ID提供{。}}。