【问题标题】:MySQL-how to merge multiple rows into multiple columns and one row?MySQL-如何将多行合并为多列一行?
【发布时间】:2017-07-18 09:30:49
【问题描述】:

如果我的 MySQL 表看起来像这样:例如 2014000 是产品笔,则有四种类型 abcd 具有不同的价格。 2014001是另一种产品电话,也有三种不同价格的efg。现在我想得到一个具有名称和值的产品。

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));

插入 T 值(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');

-----后面只有两行,如果多于四行怎么办?

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

【问题讨论】:

  • 请仅使用与您的问题相关的标签并正确格式化您的问题。
  • MySQL pivot table的可能重复

标签: mysql sql pivot


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多