Как отличить запись при использовании Group By? - PullRequest
5 голосов
/ 05 мая 2011

Алло, У меня есть таблица (см. Ниже), которая имеет 4 записи. Обратите внимание, что ColumnA и ColumnB имеют одинаковое значение, а ColumnC и columnD будут иметь разные значения.

ColumnA ColumnB ColumnC ColumnD
------- ------- ------- -------
xx      yy      AAA     333
xx      yy      BBB     555
xx      yy      AAA     333
xx      yy      BBB     555

Я пытался выбрать всю запись с помощью запроса Group By следующим образом:

SELECT ColumnC from TableA GROUP BY ColumnC;

В этом запросе отображается только ColumnC, но я ожидаю выбрать всю запись, а не только ColumnC.

ОБНОВЛЕНИЕ: Мой ожидаемый результат:

ColumnA ColumnB ColumnC ColumnD
------- ------- ------- -------
xx      yy      AAA     333
xx      yy      BBB     555

Могу ли я узнать, как я могу это сделать?

Спасибо @!

Ответы [ 5 ]

4 голосов
/ 05 мая 2011

Вы можете поместить все столбцы в свои предложения SELECT и GROUP BY:

SELECT 
    ColumnA, ColumnB, ColumnC, ColumnD 
FROM 
    TableA 
GROUP BY
    ColumnA, ColumnB, ColumnC, ColumnD

Это будет в основном эквивалентно

SELECT DISTINCT
    *
FROM
    TableA

но более явно. Как было отмечено OMG Ponies, синтаксис может варьироваться в зависимости от СУБД. В некоторых вы можете просто сделать:

SELECT * FROM TableA GROUP BY ColumnC
2 голосов
/ 05 мая 2011

В Oracle:

SELECT  *
FROM    (
        SELECT  t.*,
                ROW_NUMBER() OVER (PARTITION BY columnC ORDER BY columnA) AS rn
        FROM    mytable
        )
WHERE   rn = 1

Измените предложение ORDER BY, чтобы указать, какая из записей, содержащих дубликат, будет возвращена (теперь с наименьшим значением columnA).

1 голос
/ 05 мая 2011

Если вы используете MS SQL, вы получите то, что вам нужно: SELECT ColumnC,* from TableA GROUP BY ColumnC;

в Oracle, я полагаю, что select ColumnC, TableA.* from TableA GROUP BY COLUMNC; доставит вас туда.

0 голосов
/ 05 мая 2011

Вы хотели бы выбрать все столбцы, а затем вам нужно сгруппировать, чтобы столбец C был первым: SELECT * FROM TableA GROUP BY ColumnC, ColumnA, ColumnB, ColumnD

0 голосов
/ 05 мая 2011
SELECT * from TableA GROUP BY ColumnC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...