使用MySQL

时间:2015-07-08 08:18:54

标签: mysql

我有一个包含信息的TableA,如下:

TIME           DATA    VALUE 
-------------  ------  ------  
120520142546    Title   Mr  
120520142546    Name    Smith   
120520142546    Smoke   Yes
180303140429    Title   Ms
180303140429    Name    Lea
180303140429    Smoke   No

我正在尝试获取一个TableB(已经创建,只想插入值),其中具有相同时间值的数据显示在同一行中,如此(并且还将'Yes'转换为1和'否'由0):

ID      Title  Name    Smoke
---     -----  -----   -----
1       Mr     Smith    1
2       Ms     Lea      0

我有点明白它可以用PIVOT的东西,但我找不到一个我会理解的简单教程。

1 个答案:

答案 0 :(得分:2)

试试这个:

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

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