2014-09-25 2 views
0

Мне нужно получить отдельные строки для определенного столбца из таблицы, имеющей более 200 столбцов. Как я могу это достичь?Выберите все столбцы для отдельного столбца

Я использовал

Select distinct col1 , * from table; 

но это не удалось.

Пожалуйста, предложите элегантный способ достичь этого.

С уважением, Tarun

ответ

0

Решение, если вы хотите одну строку для каждого отдельного значения в определенном столбце:

SELECT col1, MAX(col2), MAX(col3), MAX(col4), ... 
FROM mytable 
GROUP BY col1 

Я выбрал MAX() произвольно. Он также может быть MIN() или некоторой другой совокупной функцией. Дело в том, что если вы используете GROUP BY, чтобы получить одну строку за значение в col1, тогда все другие столбцы должны быть внутри агрегатных функций.

Невозможно написать MAX (*), чтобы получить эту обработку для всех столбцов. Извините, вам придется записывать все имена столбцов (по крайней мере те, которые вам нужны в этом запросе, которые могут быть не все 200).

0

Мы можем сгенерировать последовательность из ROW_NUMBER() для каждого COL1, а затем выбрать первую запись каждой последовательности.

SELECT * FROM 
(
    SELECT E.* , ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY 1) AS ID 
    FROM YOURTABLE E 
) MYDATA 
WHERE MYDATA.ID = 1 

A working example in fiddle

+0

Почему '1' ORDER BY? Почему не 'ORDER BY COL1'? Так как порядок по константе не является порядком по этому столбцу. –

+0

Просто сделав его постоянным ради синтаксиса, OP может выбрать любое выражение там! Заказ по ключу раздела в любом случае будет таким же, как и постоянным. –

+0

> Просто сделал это постоянным ради синтаксиса .... lol. Я надеюсь, что OP не путается с порядком колонны буквально ;-) –

Смежные вопросы