2017-07-18 16 views
0

私はこのようなMySQLのテーブルを持っている:例えば、2014000は製品のペンですが、価格が異なる4種類のabcdがあります。 2014001はもう一つのprodct電話であり、そこには異なる価格の3種類のefgもあります。今私は名前と値で1つの製品を1つの行にしたいです。複数の行を複数の列と1つの行にマージする方法

id  code   name  value 

1  2014000   A   10 

2  2014000   B   9 

3  2014000   C   11 

4  2014000   D  12 

5  2014001   E  100 

6  2014001   F  110 

7  2014001   G  120 

に対する結果:

  code    name1     value1     name2    value2    name3    value3    name4    value4 

     -----------  ---------    ---------   ---------    --------- -----------  ---------    ---------   ---------    
     2014000   A      10     B      9    C      11     D     12 
     2014001   E      100     F      110    G      120     null    null  

がテーブルT(ID INT、コードINT、NAMEのCHAR(1)、VALUE VARCHAR(10))を作成します。

(122014000、 'A' (6,2014001、 'F'、 '110')、(7,2014001、 'G'、G ' 、 '120');

----- 4行以上の行がある場合は、2行しか表示されません。どうすればよいですか?

SELECT T1.code,  T2.name AS name1,  T2.value AS value1,  T3.name AS name2,  T3.value AS value2 FROM( SELECT code,MIN(ID) AS ID1,CASE COUNT(code) WHEN 1 THEN NULL ELSE MAX(ID) END AS ID2 FROM T GROUP BY code) T1 LEFT JOIN T T2 ON T1.ID1 = T2.ID LEFT JOIN T T3 ON T1.ID2 = T3.ID 
+0

だけあなたの質問に関連するタグを使用し、適切にあなたの質問をフォーマットしてください。 – Filburt

+0

[MySQLピボットテーブル]の複製(https://stackoverflow.com/questions/7674786/mysql-pivot-table) – Filburt

答えて

0
SELECT t.code 
    , t1.name name1 
    , t1.value value1 
    , t2.name name2 
    , t2.value value2 
    , t3.name name3 
    , t3.value value3 
    , t4.name name4 
    , t4.value value4 
    FROM (SELECT code 
       , group_concat(ID) ids 
      FROM T 
      GROUP BY code 
     ) t 
    LEFT JOIN T t1 
     ON find_in_set(t1.ID,t.ids)=1 
    LEFT JOIN T t2 
     ON find_in_set(t2.ID,t.ids)=2 
    LEFT JOIN T t3 
     ON find_in_set(t3.ID,t.ids)=3 
    LEFT JOIN T t4 
     ON find_in_set(t4.ID,t.ids)=4 
関連する問題