数据库
首页 > 数据库> > mysql-列作为行与另一列串联

mysql-列作为行与另一列串联

作者:互联网

因此,我必须使用一个以时间为列的数据库(在特定的一天中,每10分钟有一个列),这里的id并不是主键,即使它在另一个表中是唯一的(也是主键)也是如此.行等于一天.
所以我想将每个时隙的值与日期时间连续显示.

那有可能吗?
我可以编写一个小程序,用我需要的东西重新创建一个表,但我想减少重复的数据.

我有的 :

+---+----------+-----+-----+-----+-----+
|ID |   DATE   |00h00|00h10|00h20|00h30|
+---+----------+-----+-----+-----+-----+
|1  |2016-09-28|80   |79   |75   |73   |
+---+----------+-----+-----+-----+-----+
|1  |2016-09-27|82   |80   |76   |74   |
+---+----------+-----+-----+-----+-----+

我想要的是:

+---+----------------+-----+
|ID |        DATE    |VALUE|
+---+----------------+-----+
|1  |2016-09-28 00h00|80   |
|1  |2016-09-28 00h10|79   |
|1  |2016-09-28 00h20|75   |
|1  |2016-09-28 00h30|73   |
+---+----------------+-----+
|1  |2016-09-28 00h00|82   |
|1  |2016-09-28 00h10|80   |
|1  |2016-09-28 00h20|76   |
|1  |2016-09-28 00h30|74   |
+---+----------------+-----+

解决方法:

最简单的方法是使用union all:

select id, date_add(date, interval 0 minute) as date, `00h00` as value from t union all
select id, date_add(date, interval 10 minute) as date, `00h10` as value from t union all
. . .

如果有数字表,还可以执行以下操作:

select t.id, date_add(date, interval (n.n - 1) * 10 minute) as date,
       (case when n = 1 then `00h00`
             when n = 2 then `00h10`
             . . .
        end) as value
from t join
     numbers n
     on n.n < 24 * 6;

我认为如果不以某种方式列出所有列,就无法在MySQL中执行任何操作.您可以使用其他查询或电子表格来生成SQL.

标签:unpivot,sql,mysql
来源: https://codeday.me/bug/20191026/1938128.html