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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行转列与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

 

以上是关于行转列与CASE.....WHEN...的主要内容,如果未能解决你的问题,请参考以下文章

MySQL -- 行转列 -- GROUP_CONCAT -- MAX(CASE WHEN THEN)

MySQL行转列与列转行

SQL行转列与列转行(转)

Oracle——行转列与列转行

hive函数之~行转列与列转行

MySQL的CASE WHEN用法