2016-02-18 56 views
2

我有一個帶有2個字段的表,其中包含3行中的鍵和值。示例:Mysql - 在3行中設置循環字段中的行的鍵

Key value 

Name Apple 
Id  1 
Price 25 
Name Banana 
Id  2 
Price 23 
Name Orange 
Id  3 
Price 27 

我如何查詢以3行中的值作爲鍵獲取結果?

我希望輸出的行會像:

id-> 1 Name -> Apple Price -> 25 
id-> 2 Name -> Banana Price -> 23 
id-> 3 Name -> Orange Price -> 27 

與組試過,但沒有運氣。我知道表應該如何,這是來自舊系統的數據,我想知道是否有辦法用Mysql來做到這一點。 (我知道用PHP /拼音/ Python等如何做到這一點)

+3

SQL表示*無序*集。除了另一列指定排序或具有某種類型的id來將行連接在一起之外,沒有三行組的組合。 –

+0

我同意戈登。你不能確定ID,名稱,價格將按順序儲存,除非你有另一列按順序儲存,否則所有答案都不會返回期望的結果 –

回答

1

我前言本與國際海事組織,它應該工作。你顯然知道這是一個可怕的數據庫設計。您錯過了此表的關鍵字段。

但是,這個可能在某些情況下工作。 Sql本質上是無序 - 這意味着你需要有一些領域來建立訂單。

您需要一個行號和一個行分組才能得到結果。一般來說,你可以在不同的領域進行排序。該解決方案嘗試在不改變順序的情況下執行此操作,並使用user-defined variablesconditional aggregation來調整結果。

select max(case when `rn` = 2 then `value` end) as `Id`, 
     max(case when `rn` = 1 then `value` end) as `Name`, 
     max(case when `rn` = 3 then `value` end) as `Price` 
from (
    select *, 
     @rn:=if(@rn>2,1,@rn+1) rn, 
     @row:=if(@rn=1,@row+1,@row) `row` 
    from `yourmesseduptable` cross join (select @rn:=0, @row:=0) t 
) t 
group by `row` 

同樣,也有很多的地方,這將不會返回所期望的結果的情況。

相關問題