2011-07-12 45 views
0

我想在MySQL中将某些行转换为列。我知道它以前已被问及回答,如here如何将行转换为不含有唯一值列的列?

我的问题是,在我可以应用'if'构造的行中没有任何内容。 (至少我认为是这样。) E.g.对于下面的输入,

2 5 1000 
2 6 2000 

我可以运行此查询:

INSERT INTO SUMMARY 
    (user_id,valueA,valueB) 
    SELECT d.user_id, 
     MAX(CASE WHEN d.code = 5 THEN d.value ELSE NULL END), 
     MAX(CASE WHEN d.code = 6 THEN d.value ELSE NULL END), 
    FROM DETAILS d 
GROUP BY d.user_id 

,并得到如下的输出:

2 1000 2000 

但我的问题是,我的输入是这样的:

2 6 1000 
2 6 2000 

(s中的值的Econd列不是唯一的。) ,我仍然需要相同的输出,即:

2 1000 2000 

它可以在MySQL做呢?如果是的话,任何人都可以帮助我吗?

+0

你能否提供你的表的DDL脚本?你知道给定的“user_id”会有多少“值”,即最终结果集中有多少列?或者它是一个随机数字?在你的例子中,你怎么知道1000必须在第一列,第二列是2000? –

+0

好吧,我不确定,但现在我们可以假设每个user_id最多有10行。 – Bhushan

回答

1

那么,如果你不知道你的数据透视表中有多少列,也没有一个值来决定给定列中应该使用哪个值,那么我可以推荐的最佳解决方案是使用一个GROUP_CONCAT函数,然后在你的代码中做一些解析:

SELECT d.user_id, GROUP_CONCAT(
    d.value SEPARATOR ',' 
) AS val 
FROM details d 
GROUP BY d.user_id; 
+0

是的,尝试相同的事情。想知道是否有更好的方法。 – Bhushan

相关问题