【问题标题】:Select a subgroup of records by one distinct column按一个不同的列选择记录子组
【发布时间】:2011-10-01 12:23:18
【问题描述】:

对不起,如果之前已经回答过这个问题,但所有相关问题似乎都不太符合我的目的。

我有一个如下所示的表格:

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 或某种类型的自连接子查询来解决?我现在在一个街区,所以我看不到任何其他解决方案。

【问题讨论】:

    标签: sql tsql unique distinct


    【解决方案1】:

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

    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
    

    这将保持您的非聚合字段之间的完整性,但仍会根据ID 为您提供MAX(Poss_Phone)

    【讨论】:

    • 我真的只是偶然发现了这一点,然后回来发帖。 +1
    • @Joe - 子查询对于这样的事情非常方便。
    • 我讨厌在我花了一个多小时试图弄清楚它之后看起来多么明显。
    • @joe - 有时您需要退后一步才能完全看到问题。
    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2019-05-02
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    相关资源
    最近更新 更多