Sql 在postgres中拆分列值

Sql 在postgres中拆分列值,sql,postgresql,csv,Sql,Postgresql,Csv,我有一个带有两列id和数据的表。表中的数值如下所示: id|data| 1 |A,B | 2 |B,C | 3 |C,D | 4 |D,A | 5 |E,C | id|data| 1 | A | 1 | A | 1 | A | 1 | A | 1 | A | 1 | A | 1 | A | 1 | A | 我需要表中A,B,C,D,E的编号,如下所示。请注意:列是动态的,表示它们取决于表中数据列中的值: A|B|C|D|E| 2|2|3|2|1| 我编写了以下查询: SEL

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

id|data|
1 |A,B |
2 |B,C |
3 |C,D |
4 |D,A |
5 |E,C |
id|data|
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
我需要表中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,B |
2 |B,C |
3 |C,D |
4 |D,A |
5 |E,C |
id|data|
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |
1 | A  |

请查找提供您想要的确切输出的查询

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(如果没有创建)。

我想我不需要提及您可能应该重新设计您的架构,这样就不需要使用“SQL体操”。-)如果您发现自己试图处理子列(列的一部分),你可能做错了。停止在这上面浪费时间,修复数据列中的datais 2值修复了吗?yes@BhaveshGhodasaraModify该查询按s.data分组,并将
id
更改为
count(*)