我有一个很深的mysql表,有4列
source1 | id1 | source2 | id2
red | 1 | blue | 1
red | 1 | green | 3
red | 1 | green | 6
red | 2 | blue | 2
red | 3 | blue | 2
我想要的是...... (source)_ids,(source)_ids,(source)_ids,(source)_ids等,每个不同的源具有不同的列。
所以
...变为
red_ids | blue_ids | green_ids
1 | 1 | 3, 6
2,3 | 2 | NULL
我试图用case和group_concat完成这个,但还没有得到我想要的结果。在我尝试通过编写python程序来做到这一点之前,任何人都知道这是否有正常约定?
如果添加新来源,动态会更好。
提前致谢。
答案 0 :(得分:0)
实际上,这个问题比第一次出现时更棘手。在我看来几乎不可能想到一种在SQL中动态构建它的方法 - 所以我很想转向应用程序层解决方案 - 但有人可能有另一个想法......
SELECT GROUP_CONCAT(DISTINCT r.id1) red
, GROUP_CONCAT(DISTINCT b.id2) blue
, GROUP_CONCAT(DISTINCT g.id2) green
FROM my_table r
LEFT
JOIN my_table b
ON b.id1 = r.id1
AND b.source2 = 'blue'
LEFT
JOIN my_table g
ON g.id1 = r.id1
AND g.source2 = 'green'
WHERE r.source1 = 'red'
GROUP
BY r.source1
, b.source2
, g.source2;