案例来源,感谢网友提供的案例,在其基础上面进行了,简化,尽管不满足数据库范式,但是足以说明问题
原始要求如下:
已知源表数据如下:
PID | Num | Loc | |||
苹果 | 11 | 北京仓 | |||
香蕉 | 22 | 上海仓 | |||
大鸭梨 | 44 | 广州仓 | |||
苹果 | 66 | 深圳仓 |
现在要求得到每种商品在库存量报表,方便统一调度和展示
PID | 北京仓 | 上海仓 | 广州仓 | 深圳仓 | …… |
苹果 | 11 | 0 | 0 | 66 | |
香蕉 | 0 | 22 | 0 | 0 | |
大鸭梨 | 0 | 0 | 44 | 0 |
解决方案一:
解决方案二:
解决方案三:
附件:
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50547
Source Host : localhost:3306
Source Database : db1
Target Server Type : MYSQL
Target Server Version : 50547
File Encoding : 65001
Date: 2017-07-09 17:58:13
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `p`
-- ----------------------------
DROP TABLE IF EXISTS `p`;
CREATE TABLE `p` (
`id` int(11) NOT NULL DEFAULT '0',
`pid` varchar(30) DEFAULT NULL,
`num` int(11) DEFAULT NULL,
`loc` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of p
-- ----------------------------
INSERT INTO `p` VALUES ('1', '苹果', '11', '北京仓');
INSERT INTO `p` VALUES ('2', '香蕉', '22', '上海仓');
INSERT INTO `p` VALUES ('3', '大鸭梨', '44', '广州仓');
INSERT INTO `p` VALUES ('4', '苹果', '66', '深圳仓');