将mysql表行转换为列
我有以下两个表格:将mysql表行转换为列,mysql,select,rows,transpose,Mysql,Select,Rows,Transpose,我有以下两个表格: CREATE TABLE asset ( sid int(11) NOT NULL AUTO_INCREMENT, asset_code varchar(32), notes longtext, PRIMARY KEY ('sid'), kEY 'index_asset' ('asset_code'), ) CREATE TABLE asset_data ( asset_code varchar(32) NOT NULL , sid int(10) unsigned
CREATE TABLE asset (
sid int(11) NOT NULL AUTO_INCREMENT,
asset_code varchar(32),
notes longtext,
PRIMARY KEY ('sid'),
kEY 'index_asset' ('asset_code'),
)
CREATE TABLE asset_data (
asset_code varchar(32) NOT NULL ,
sid int(10) unsigned NOT NULL,
field_name varchar(128) NOT NULL,
field_value mediumtext NOT NULL,
PRIMARY KEY (sid,field_name),
KEY asset_code (asset_code),
KEY sid_asset_code (sid,asset_code)
)
表中的样本数据如下所示:
INSERT INTO asset(asset_code,notes)
values('asset001','aaaaaaaa'),
('asset002','bbbbbbbb');
INSERT INTO asset_data(asset_code,sid,field_name,field_value)
values('asset001',1,'location','LL'),
('asset001',1,'mass','20kg'),
('asset001',1,'date_of_purchase','2005-04-17'),
('asset002',2,'location','CK'),
('asset002',2,'mass','190kg'),
('asset002',2,'date_of_purchase','2010-04-03');
如何显示此数据,使数据看起来如下所示:
asset_code sid location mass date_of_purchase
asset001 1 LL 20kg 2005-04-17
asset002 2 CK 190kg 2010-04-03
这个过程称为pivot。 这是由GROUP BY与MAX和CASE组合完成的 查询
SELECT
asset_data.asset_code
, asset_data.sid
, MAX(
CASE
WHEN asset_data.field_name = 'location'
THEN asset_data.field_value
END
) AS location
, MAX(
CASE
WHEN asset_data.field_name = 'mass'
THEN asset_data.field_value
END
) AS mass
, MAX(
CASE
WHEN asset_data.field_name = 'date_of_purchase'
THEN asset_data.field_value
END
) AS date_of_purchase
FROM
asset_data
GROUP BY
asset_data.asset_code
, asset_data.sid
结果
asset_code sid location mass date_of_purchase
---------- ------ -------- ------ ------------------
asset001 1 LL 20kg 2005-04-17
asset002 2 CK 190kg 2010-04-03
这个过程称为pivot。 这是由GROUP BY与MAX和CASE组合完成的 查询
SELECT
asset_data.asset_code
, asset_data.sid
, MAX(
CASE
WHEN asset_data.field_name = 'location'
THEN asset_data.field_value
END
) AS location
, MAX(
CASE
WHEN asset_data.field_name = 'mass'
THEN asset_data.field_value
END
) AS mass
, MAX(
CASE
WHEN asset_data.field_name = 'date_of_purchase'
THEN asset_data.field_value
END
) AS date_of_purchase
FROM
asset_data
GROUP BY
asset_data.asset_code
, asset_data.sid
结果
asset_code sid location mass date_of_purchase
---------- ------ -------- ------ ------------------
asset001 1 LL 20kg 2005-04-17
asset002 2 CK 190kg 2010-04-03
您需要连接asset_数据表两次。No@Roman您需要使用GROUP BY结合MAX和CASE进行透视您需要连接asset_数据表两次。No@Roman您需要使用GROUP BY结合MAX和CASE进行透视