Mysql 列转行 实例

 数据结构

抽奖箱表

CREATE TABLE `yoshop_shang_activity_box` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `activity_id` int(11) NOT NULL COMMENT '活动id',
  `number` int(11) NOT NULL COMMENT '活动下的箱子编号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8 COMMENT='抽奖箱表';

抽奖箱-奖品-中间表

CREATE TABLE `yoshop_shang_box_goods` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `box_id` int(11) NOT NULL COMMENT '抽奖箱id',
  `category_id` int(11) NOT NULL COMMENT '商品分类id',
  `goods_id` int(11) NOT NULL COMMENT '商品id',
  `total` int(11) NOT NULL COMMENT '对应商品在抽奖箱内的总数',
  `stock_num` int(11) NOT NULL COMMENT '对应商品在抽奖箱内的余数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=332 DEFAULT CHARSET=utf8 COMMENT='抽奖箱-奖品-中间表';

 SQL语句

SELECT
	a.activity_id,
	a.number,
	b.box_id,
	b.category_id,
	b.goods_id,
	b.total,
	b.stock_num,
	MAX(
		CASE
		WHEN category_id = 1 THEN
			total
		END
	) AS A_total,
	MAX(
		CASE
		WHEN category_id = 1 THEN
			stock_num
		END
	) AS A_stock_num,
	MAX(
		CASE
		WHEN category_id = 2 THEN
			total
		END
	) AS B_total,
	MAX(
		CASE
		WHEN category_id = 2 THEN
			stock_num
		END
	) AS B_stock_num,
	MAX(
		CASE
		WHEN category_id = 3 THEN
			total
		END
	) AS C_total,
	MAX(
		CASE
		WHEN category_id = 3 THEN
			stock_num
		END
	) AS C_stock_num
FROM
	yoshop_shang_activity_box a
LEFT JOIN yoshop_shang_box_goods b ON b.box_id = a.id
WHERE
	a.activity_id = 4
GROUP BY
	box_id

效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值