行转列与CASE.....WHEN...

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tabname
-- ----------------------------
DROP TABLE IF EXISTS `tabname`;
CREATE TABLE `tabname` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(20) DEFAULT NULL,
  `Date` date DEFAULT NULL,
  `Scount` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tabname
-- ----------------------------
INSERT INTO `tabname` VALUES ('1', '小说', '2013-09-01', '10000');
INSERT INTO `tabname` VALUES ('2', '微信', '2013-09-01', '20000');
INSERT INTO `tabname` VALUES ('3', '小说', '2013-09-02', '30000');
INSERT INTO `tabname` VALUES ('4', '微信', '2013-09-02', '35000');
INSERT INTO `tabname` VALUES ('5', '小说', '2013-09-03', '31000');
INSERT INTO `tabname` VALUES ('6', '微信', '2013-09-03', '36000');
INSERT INTO `tabname` VALUES ('7', '小说', '2013-09-04', '35000');
INSERT INTO `tabname` VALUES ('8', '微信', '2013-09-04', '38000');
INSERT INTO `tabname` VALUES ('9', '微信', '2013-09-01', '30000');

查询结果:

id   Name   Date          Scount
1
小说 2013-09-01 10000 2 微信 2013-09-01 20000 3 小说 2013-09-02 30000 4 微信 2013-09-02 35000 5 小说 2013-09-03 31000 6 微信 2013-09-03 36000 7 小说 2013-09-04 35000 8 微信 2013-09-04 38000 9 微信 2013-09-01 30000

执行:

SELECT 
CASE NAME WHEN '小说' THEN Scount ELSE 0 END  小说,
CASE NAME WHEN '微信' THEN Scount ELSE 0 END  微信 
FROM TabName  
where Date='2013-09-01'

得到:

小说       微信
10000     0
0        20000
0        30000

执行:

SELECT 
SUM(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
SUM(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信 
FROM TabName  
where Date='2013-09-01'

得到:

小说      微信
10000    50000

执行:

SELECT Date ,
SUM(CASE NAME WHEN '小说' THEN Scount ELSE 0 END ) 小说,
SUM(CASE NAME WHEN '微信' THEN Scount ELSE 0 END ) 微信 
FROM TabName  
GROUP BY Date

得到:

Date      小说    微信
2013
-09-01 10000 50000 2013-09-02 30000 35000 2013-09-03 31000 36000 2013-09-04 35000 38000
原文地址:https://www.cnblogs.com/soar-hu/p/6747609.html