Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 列作为行与另一列连接_Mysql_Sql_Unpivot - Fatal编程技术网

Mysql 列作为行与另一列连接

Mysql 列作为行与另一列连接,mysql,sql,unpivot,Mysql,Sql,Unpivot,所以我必须使用一个以时间为列的数据库(在特定的一天中每10分钟有一列),这里的id不是主键,即使它在另一个表中是唯一的(也是主键)。这些行等于一天。 所以我想把每个时隙的值和datetime放在一行上 这可能吗? 我可以编写一个小程序,用我需要的东西重新创建一个表,但我希望有尽可能少的重复数据 我所拥有的: +---+----------+-----+-----+-----+-----+ |ID | DATE |00h00|00h10|00h20|00h30| +---+--------

所以我必须使用一个以时间为列的数据库(在特定的一天中每10分钟有一列),这里的
id
不是主键,即使它在另一个表中是唯一的(也是主键)。这些行等于一天。 所以我想把每个时隙的值和datetime放在一行上

这可能吗? 我可以编写一个小程序,用我需要的东西重新创建一个表,但我希望有尽可能少的重复数据

我所拥有的:

+---+----------+-----+-----+-----+-----+
|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;
选择t.id、日期添加(日期、间隔(n.n-1)*10分钟)作为日期,
(如果n=1,则为'00h00`
当n=2时,则为'00h10`
. . .
结束)作为值
从t连接
数字
n.n<24*6;

我认为在MySQL中,如果不以某种方式列出所有列,就没有办法做到这一点。您可以使用其他查询或电子表格生成SQL。

您真是个天才!它是有效的,有点难看,因为它们是24*6列,但是哇,谢谢!你的答案有点输入错误,是
date\u add()
不是
dateadd()
,顺便说一句,表格编号的意思是
00h00
00h10