2014-11-21 24 views
0

sqlfiddle多案例值來讓MySQL

SELECT id, 
(
CASE 
    WHEN keyName="disable_id" THEN "disableId" 

END) AS name1, 

(CASE 
    WHEN keyName="disable_id" THEN keyValue 

END) 
AS value1 

FROM mytbl 

UNION 

SELECT id, 
(
CASE 
    WHEN keyName="disable_id" THEN "is_disabled" 
END) AS name1, 

(CASE 
    WHEN keyName="disable_id" THEN "yes" 
END) 
AS value1 

FROM mytbl 

; 

我需要一個鍵轉換成多個鍵值。 有沒有比這更好的方法?

感謝您的建議。

+0

什麼是您使用此方法時所面臨的問題?我認爲這是一個好方法。你爲什麼要尋找另一種方法? – 2014-11-21 05:19:34

+0

我基本上有很大的查詢,所以多次聯合使它非常大。所以只需檢查一下,我們可以在一個查詢中完成。 – manish 2014-11-21 05:25:10

+0

真的很糟糕的例子,但你也是新的。你可以編輯你的文章,並顯示你擁有的一些真實的樣本數據,以及你試圖從中得到什麼,即使你手動創建模擬結果。不要在格式化中使用Tab鍵,只是空格。 – DRapp 2014-11-21 05:38:47

回答

0

嘗試使用IF或GROUP_CONCAT更緊湊的形式:

SELECT id, 
    max(if(`keyName`='disable_id',`keyValue`,null)) disable_id, 
    max(if(`keyName`='disable_xx',`keyValue`,null)) disable_xx, 
    max(if(`keyName`='disable_yy',`keyValue`,null)) disable_yy, 
    max(if(`keyName`='disable_zz',`keyValue`,null)) disable_zz 
FROM mytbl 
GROUP BY id 
; 

SELECT id, 
     GROUP_CONCAT(`keyName`,'=',`keyValue`) as val 
FROM mytbl 
GROUP BY id 
; 

演示:http://sqlfiddle.com/#!2/d7a27/11

+0

不,基本上我只需要鍵值格式。輸出應該與它在我的sqlfiddle輸出中相同。 – manish 2014-11-21 07:41:53

+0

我現在看到,在這種情況下,您可以嘗試使用UNION ALL - > http://sqlfiddle.com/#!2/a57b3/1 – krokodilko 2014-11-21 09:43:17