MySQL 列变行 数据变换 行列转换

/*创建表*/
DROP TABLE IF EXISTS `demo`;
CREATE TABLE `demo` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `field_name` varchar(32) NOT NULL COMMENT '字段名称',
  `field_val` text NOT NULL COMMENT '字段值',
  `key`  varchar(32) NOT NULL COMMENT '分组标示',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

/*数据*/
INSERT INTO `demo` VALUES ('1', 'date', '2015-01-01 00:00:00',1);
INSERT INTO `demo` VALUES ('2', 'createtime', '2015-12-30 10:12:12',1);
INSERT INTO `demo` VALUES ('3', 'date', '2015-01-01 00:00:10',2);
INSERT INTO `demo` VALUES ('4', 'createtime', '2015-12-30 12:12:12',2);

/*创建视图*/
DROP VIEW IF EXISTS `demo_view`;
create view demo_view as SELECT
`key`,
	MAX(
		CASE
		WHEN field_name = 'date' THEN
			field_val
		END
	) AS date,
	MAX(
		CASE
		WHEN field_name = 'createtime' THEN
			field_val
		END
	) AS createtime
FROM
	demo
GROUP BY `key`;

select * from demo_view ;
/*不使用视图,直接搜索*/
SELECT
`key`,
	MAX(
		CASE
		WHEN field_name = 'date' THEN
			field_val
		END
	) AS date,
	MAX(
		CASE
		WHEN field_name = 'createtime' THEN
			field_val
		END
	) AS createtime
FROM
	demo
GROUP BY `key`;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值