如果有一个表r(c,s)和这样的关系(c表示类,s表示学生),我想知道所有可能的组合c1,c2,.. c5,s1,... s8 ,如何编写SQL子句?我试着用case来写它,但它太慢了。我正在使用PostgreSQl。
c1:s1,s5,s7
c2:s1,s2,s3,s4
c3:s2,s6,s8
c4:s4,s5,s6
c5:s3,s7,s8
答案 0 :(得分:0)
试试这个:
SELECT c, string_agg(s, ',')
FROM r
GROUP BY c;
注意:string_agg()
是在PostgreSQL 9.0中引入的。
答案 1 :(得分:0)
您要将行交换到表r(c,s)列吗? 如果需要,可以将此SQL用于exp:
digoal=# select split_part(val,':',1), regexp_split_to_table(split_part(val,':',2), ',') from (values ('c1:s1,s5,s7'),('c2:s1,s2,s3,s4')) as t(val);
split_part | regexp_split_to_table
------------+-----------------------
c1 | s1
c1 | s5
c1 | s7
c2 | s1
c2 | s2
c2 | s3
c2 | s4
(7 rows)