`name` varchar(255) DEFAULT NULL,
`kemu` varchar(255) DEFAULT NULL,
`chengji` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8; //创建表
INSERT into test2 VALUES('张三','数学',55)
INSERT into test2 VALUES('张三','语文',44)
INSERT into test2 VALUES('李四','语文',66)
INSERT into test2 VALUES('李四','数学',54)
INSERT into test2 VALUES('王五','语文',67)
INSERT into test2 VALUES('王五','数学',34) //添加数据
SELECT * from test2 //查询表
SELECT name ,SUM(CASE kemu WHEN '数学' THEN chengji ELSE 0 END) AS 数学,
sum(CASE kemu WHEN '语文' THEN chengji END) as 语文
FROM test2 GROUP BY name //查询
完成列换行查询。
要点:
SUM(CASE kemu WHEN '数学' THEN chengji ELSE 0 END) 这条语句
sum()求和
CASE kemu WHEN '数学' THEN chengji ELSE 0 END 这个就是当kemu为‘数学’时取成绩,否则就不取。then chengji 就是从chengji里取值,ELSE 0这个我目前不清楚,但从多次实验结果来看就像chengji与else后面的值。
当你用sum()查时,将0改为1就会使得结果+1,而用max()查时就不会变(除非小于1)。所以我在第三个字段查询中去掉了else 0,结果不影响。我猜测这是用来防止chengji为空的情况,赋予0值。