Выберите подгруппу записей по одному отдельному столбцу - PullRequest
1 голос
/ 08 июля 2011

Извините, если на этот вопрос уже был дан ответ, но все связанные вопросы не совсем соответствуют моей цели.

У меня есть таблица, которая выглядит следующим образом:

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

Я хочу выбрать только отдельные значения идентификатора для вставки, но мне все равно, какой конкретный идентификатор извлекается из дубликатов.

Например (допустимый 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 Ответ

2 голосов
/ 08 июля 2011

Просто получите агрегирование в подзапросе и присоединитесь к нему:

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.

...