2012-08-22 117 views
3

我有一張表,其中有一個ticket_id's,field_id's和值。 例如。SQL結果水平而不是垂直

 
ticket_id field_id value 
1001  1   Peter 
1002  1   Dave 
1001  2   555-2565 
1002  2   554-2548 

目標是我想寫一個查詢,將在同一張表中水平顯示值。例如。

 
Ticket_ID  Field1  Field2 
1001   Peter  555-2565 
1002   Dave   554-2548 

有很多field_ids。我曾嘗試使用rownumber(),但它沒有奏效。

任何想法?

+1

谷歌的'mysql的rank',[這是一個這樣的(http://thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/) – tuxuday

回答

2
Select Temp_field1.ticket_id,Field1,Field2 
From 
    (Select ticket_id,value as Field1 from table where field_id = 1) as Temp_field1, 
    (Select ticket_id,value as Field2 from table where field_id = 2) as Temp_field2 
Where Temp_field1.ticket_id = Temp_field2.ticket_id; 
+0

你錯過一些'='符號。 – Barmar

1
SELECT TICKET_ID, MAX(FIELD_1),MAX(FIELD_2) 
FROM (
SELECT TICKET_ID, CASE field_id 
WHEN 1 THEN VALUE 
ELSE NULL end AS FIELD_1,CASE field_id 
WHEN 2 THEN VALUE 
ELSE NULL end AS FIELD_2) 
GROUP BY FIELD_1,FIELD_2 

這是一個有點古怪,但我試圖儘量減少選擇。 的想法是把空的時候,我們並不需要的價值 ,當我們做MAX,它西港島線採取的是不爲空(MAX適用於VARCHAR)

0

這個答案之前給定的值。你可以在這裏查看。

MySQL pivot table

基本上你轉動「組」(或不同),選擇您FIELD_ID。

0

這裏有一個選項。如果有很多field_ids,不知道性能。

SELECT t1.`ticket_id` AS Ticket_ID, t1.`value` AS Field1, t2.`value` AS Field2 FROM `ticket` t1 
    LEFT JOIN `ticket` t2 ON t1.`ticket_id` = t2.`ticket_id` 
    WHERE t1.`value` != t2.`value` 
    GROUP BY t1.`ticket_id`