2011-07-12 72 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

相關問題