表結構數據轉載自:http://stunizhengjia.iteye.com/blog/2032861
數據表:
sql:
CREATE TABLE `t_shcool` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
`userName` varchar(50) DEFAULT NULL COMMENT '姓名',
`course` varchar(50) DEFAULT NULL COMMENT '科目',
`score` int(20) DEFAULT NULL COMMENT '成績',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
insert into `t_shcool`
(`id`,`userName`,`course`,`score`)
values
(1,'張三','語文',66),
(2,'張三','數學',77),
(3,'張三','英文',88),
(4,'李四','語文',99),
(5,'李四','數學',100),
(6,'李四','英文',55),
(7,'王五','語文',44),
(8,'王五','數學',33),
(9,'馬六','英文',22),
(10,'馬六','語文',11);
表預覽:
列傳行
SELECT
userName AS '姓名',
SUM(CASE WHEN course='語文' THEN score ELSE 0 END) AS '語文',
SUM(CASE WHEN course='數學' THEN score ELSE 0 END) AS '數學',
SUM(CASE WHEN course='英文' THEN score ELSE 0 END) AS '英文'
FROM t_shcool GROUP BY userName
結果
小結:
course='語文' 表示當course列值爲語文時 (列傳行)
THEN score 表示匹配對應的值,這邊是對應score列的值 (設置值)
ELSE 0 END 表示其他情況 這邊的0等於null 表示不用
AS''表示新列的名字 (行名)
SUM表示和也可以用MAX表示最大值(如張三有2個語文成績的時候就匹配最大的如果是SUM則是相加)
注意使用group by 不然只會顯示一行數據
行轉列
sql:
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=9 DEFAULT CHARSET=utf8;
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');
select
Date, group_concat(NAME,'總量:',Scount) as b_str from TabName
group by Date
效果select Date,NAME, group_concat(NAME,'總量:',Scount) as b_str from TabName
group by Date ,NAME
效果