Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 - Fatal编程技术网

用MySQL实现垂直表到水平表的转换

用MySQL实现垂直表到水平表的转换,mysql,Mysql,我有一张表格,上面有这样的信息: TIME DATA VALUE ------------- ------ ------ 120520142546 Title Mr 120520142546 Name Smith 120520142546 Smoke Yes 180303140429 Title Ms 180303140429 Name Lea 180303140429 Smoke No

我有一张表格,上面有这样的信息:

TIME           DATA    VALUE 
-------------  ------  ------  
120520142546    Title   Mr  
120520142546    Name    Smith   
120520142546    Smoke   Yes
180303140429    Title   Ms
180303140429    Name    Lea
180303140429    Smoke   No
我正在尝试获取一个表B(已经创建,只想插入值),其中具有相同时间值的数据显示在同一行中,如下所示(并将“是”转换为1,将“否”转换为0):

我有点理解PIVOT可以实现这一点,但我找不到一个容易理解的教程。

试试这个:

CREATE TABLE TableB (
    Id int NOT NULL AUTO_INCREMENT,
    Title varchar(255) NOT NULL,
    Name varchar(255) NOT NULL,
    Smoke tinyint(255) NOT NULL,
    PRIMARY KEY (Id)
);

INSERT INTO TableB (Title, Name, Smoke)
SELECT t1.value AS title, t2.value AS name, (t3.value = 'Yes') AS smoke
FROM TableA t1
JOIN TableA t2 ON t1.time = t2.time
JOIN TableA t3 ON t1.time = t3.time
WHERE t1.data = 'Title' AND t2.data = 'Name' AND t3.data = 'Smoke';

这假设所有三个属性对于每个时间戳都是可用的,并且对于任何时间戳都不存在重复条目。

感谢的可能重复,这有点基本,因为我有很多数据,而不仅仅是三个,但这可以很好地完成工作。实际上,由于我有(13)个值,这个方法不起作用。它运行了一段不确定的时间,使chrome与phpMyAdmin崩溃。尝试为时间和数据列编制索引。因为我无法控制该表,也许我应该克隆它?
CREATE TABLE TableB (
    Id int NOT NULL AUTO_INCREMENT,
    Title varchar(255) NOT NULL,
    Name varchar(255) NOT NULL,
    Smoke tinyint(255) NOT NULL,
    PRIMARY KEY (Id)
);

INSERT INTO TableB (Title, Name, Smoke)
SELECT t1.value AS title, t2.value AS name, (t3.value = 'Yes') AS smoke
FROM TableA t1
JOIN TableA t2 ON t1.time = t2.time
JOIN TableA t3 ON t1.time = t3.time
WHERE t1.data = 'Title' AND t2.data = 'Name' AND t3.data = 'Smoke';