mysql 列傳行 行轉列 個人總結

表結構數據轉載自: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  


效果

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章