如何将动态行数据显示到动态列中

时间:2014-08-18 05:10:37

标签: mysql sql database

大家好我有一个表有两个列我希望在不同列中显示第2列数据没有什么是修复每个东西都是动态的,就像基于行的列创建一样

表1

id col1 col2
1   x   aa
2   x   bb
3   x   cc
4   y   ww
5   y   ee
6   z   hh
7   z   tt
8   z   uu
9   z   pp
10  z   oo

我想要这种格式的table1数据

id val1 val2 val3 val4 val5 val6
1   x    aa   bb   cc   null null
2   y    ww   ee   null null null
3   z    hh   tt   uu   pp   oo

任何人都可以帮帮我 我怎么能在mysql中做到这一点

1 个答案:

答案 0 :(得分:0)

这个结果:

| ID | VAL1 | VAL2 | VAL3 |   VAL4 |   VAL5 |   VAL6 |
|----|------|------|------|--------|--------|--------|
|  1 |    x |   aa |   bb |     cc | (null) | (null) |
|  4 |    y |   ww |   ee | (null) | (null) | (null) |
|  6 |    z |   hh |   tt |     uu |     pp |     oo |

来自此查询:

SELECT
      MIN(id)                                AS id
    , col1                                   AS val1
    , MAX(CASE WHEN colno = 1 THEN col2 END) AS val2
    , MAX(CASE WHEN colno = 2 THEN col2 END) AS val3
    , MAX(CASE WHEN colno = 3 THEN col2 END) AS val4
    , MAX(CASE WHEN colno = 4 THEN col2 END) AS val5
    , MAX(CASE WHEN colno = 5 THEN col2 END) AS val6
FROM (
      SELECT
               @row_num :=IF(@prev_value = t.col1, @row_num + 1,1) AS colno
             , t.id
             , t.col1
             , t.col2
             , @prev_value := t.col1 as pv
      FROM Table1 t
      CROSS JOIN(SELECT @row_num := 1 x, @prev_value :='' y) vars
      ORDER BY t.col1, t.id ASC
      ) sq
GROUP BY
      col1
ORDER BY
      col1
;

但是你应该注意到,像这样的网站不是我们只是为你咳嗽完成工作的地方。你应该至少展示你尝试过的东西。声称紧迫感并没有帮助,那些提供答案的人也有工作要做,这完全是自愿的。

请准备好您的下一个问题,并提供一些研究和尝试查询的证据。