在postgres中拆分列值

时间:2016-12-19 06:15:15

标签: sql postgresql csv

我有一个表有两列id和数据。表中的值如下:

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

我需要表中的A,B,C,D,E数量如下。请注意:列是动态的,意味着它们取决于表中数据列中的值:

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  |

1 个答案:

答案 0 :(得分: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(如果未创建)。