2016-12-19 3 views
3

У меня есть одна таблица с двумя идентификаторами столбцов и данными. Значения в таблице являются следующие:Значения разделяемых столбцов в postgres

id|data| 
1 |A,B | 
2 |B,C | 
3 |C,D | 
4 |D,A | 
5 |E,C | 

мне нужно число А, В, С, D, Е присутствует в таблице ниже. Пожалуйста, обратите внимание: столбцы являются динамическими средствами они зависят от значений в столбце данных из таблицы:

A|B|C|D|E| 
2|2|3|2|1| 

И я написал следующий запрос:

SELECT id,s.data 
FROM my_table t, 
     unnest(string_to_array(t.data, ',')) s(data); 

Выход задается следующим образом:

id|data| 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
1 | A | 
+7

Я полагаю, что мне не нужно упоминать, что вы, вероятно, должны перестроить свою схему таким образом, чтобы эта «гимнастика SQL» не была необходима :-) Если вы * когда-либо пытаетесь обрабатывать под-столбцы (части столбец), вы, вероятно, ошибаетесь. – paxdiablo

+1

прекратить тратить время на это и исправить свои данные – e4c5

+0

- 2 значения в столбцах данных фиксированы? –

ответ

0

Пожалуйста, найдите запрос, который обеспечивает точный результат, который вы хотите.

select * from crosstab ('SELECT ''Total'':: text, s.data, count(*)::int 
FROM my_table t, unnest(string_to_array(t.data, '','')) s(data) 
group by s.data') as ct(Total text, A int, B int, C int, D int, E int) 

Пожалуйста, создайте расширение tablefunc (если не создано).

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