2015-07-28 2 views
0

У меня есть таблица, которая имеет записи следующим образом, 2 колонки, col1id и col1:PostGreSQL - Ряды в Колонном

AA1  TextAA1 
AA2  TextAA2 
AA3  TextAA3 
AB1  TextAB1 
AC1  TextAC1 
BA1  TextBA1 
BA2  TextBA2 
BA3  TextBA3 
BB1  TextBB1 
BC1  TextBC1 
CA1  TextCA1 
CA2  TextCA2 
CA3  TextCA3 
CB1  TextCB1 
CC1  TextCC1 

мне нужно сделать таблицу, которая является как для вывода:

TextAA1, TextAA2, TextAA3 
TextBA1, TextBA2, TextBA3 
TextCA1, TextCA2, TextCA3 

Невозможно связать записи вместе, кроме факта, что они сгруппированы как AA1-3, BA1-3 и т. Д. Другие записи? B? и? C? могут быть проигнорированы.

Я просмотрел различные ответы, включая кросс-таблицу (установлен) и попытался сделать запрос с использованием соединений безрезультатно.

Вот один пример того, что я пробовал:

SELECT col1 as a1, row_number() OVER(ORDER BY col1id ASC) as a2 
    FROM table01 
    WHERE col1id LIKE '_A_' 
JOIN (
SELECT col2 as c1, row_number() OVER(ORDER BY col1id ASC) as c2 
    FROM table01 
    WHERE col1id LIKE '_A_') ON a2 = c2 

Но я не могу получить над РЕГИСТРИРУЙТЕСЬ ошибку.

Как я могу это сделать? Спасибо заранее,

ответ

2

Используйте array_agg() агрегировать col1 значения в группах по первой букве col1id:

select a[1] a1, a[2] a2, a[3] a3 
from (
    select array_agg(col1) a 
    from (
     select substr(col1id, 1, 1) letter, * from table01 
     where col1id like '_A_' 
     order by 2 
     ) sub 
    group by letter 
    order by 1 
    ) sub; 
+0

Абсолютно прибил его, никогда бы не подумал об этом, большое спасибо – Sean

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