2014-03-28 36 views
0

我有一個MySQL表是這樣的:Mysql的轉換表從長格式的寬幅

而且我想它從長格式轉換爲寬幅這樣

對不起。我是新的,不知道如何發佈表

+1

you shou ld使用數據透視表來獲取它.. – jmail

+0

好的。我明白了...... – Luvias

回答

2

試試這個:

insert into goodTable 
select 
bt.id, 
(select bt1.value from badTable bt1 where bt1.info = 'firstname' and bt1.id = bt.id), 
(select bt1.value from badTable bt1 where bt1.info = 'lastname' and bt1.id = bt.id), 
(select bt1.value from badTable bt1 where bt1.info = 'phone' and bt1.id = bt.id) 
from 
badTable bt 
group by id ; 

這裏的工作小提琴:http://sqlfiddle.com/#!2/45f29e/2

+0

偉大的答案,我使用你的命令,它工作正常,非常感謝你 – Luvias

+1

這與沒有子查詢的純粹的group by解決方案相比如何優化? – 2014-03-28 16:00:46

4

你需要的東西是這樣的:

select id, 
     max(case when info='firstname' then value else null end), 
     max(case when info='lastname' then value else null end), 
     ... 
    from table 
    group by id; 
+0

感謝您的幫助。 – Luvias

-1

試試這個:

SELECT P.`info`, 
     (CASE 
      WHEN P.`action`='fname' AND P.`id` = '1'OR'2' 
      THEN P.`id` 
      ELSE NULL 
     END)AS 'firstname', 

     (CASE 
      WHEN P.`action`='lname' AND P.`id` = '2' OR'2' 
      THEN P.`id` 
      ELSE NULL 
     END) AS 'lastname', 

     (CASE 
      WHEN P.`action`='phone' AND P.`id` = '1'OR'2' 
      THEN P.`id` 
      ELSE NULL 
     END) AS 'phone' 
FROM tablename P 
GROUP BY P.`info`; 
+0

非常感謝您...... – Luvias

+0

在您的病例陳述中包含「ID」條件是沒有意義的。 – 2014-03-28 16:02:00