資料庫行列轉置的實現_Mysql/Oracle/Sqlserver/Pgsql
阿新 • • 發佈:2021-01-27
環境是Mysql8.03,用mysql全系列都可以,視覺化頁面是Navicat;
使用學生考試成績表作為參考對資料庫行列轉置進行說明,因為只使用到CASE WHEN函式,未涉及複雜函式,所以適應於SqlServer、Oracle、Pgsql等任何關係型資料庫
建表語句如下
create table StuGrade
(
Sname char(10), -- 學生姓名
Cname char(10), -- 課程名稱
Grade float -- 分數
);
insert into StuGrade values ('劉亦菲','數學',92);
insert into StuGrade values('劉亦菲','資料庫',85);
insert into StuGrade values('劉亦菲','資訊系統',92);
insert into StuGrade values('周杰倫','數學',66);
insert into StuGrade values('周杰倫','資料庫',83);
insert into StuGrade values('周杰倫','資訊系統',66);
insert into StuGrade values('周潤發','資訊系統',59);
insert into StuGrade values('梁朝偉','資訊系統',66);
具體實現語句,使用SUM()
SELECT
Sname,
SUM(CASE Cname WHEN '資料庫' THEN grade END) AS '資料庫',
SUM(CASE Cname WHEN '數學' THEN grade END) AS '數學' ,
SUM(CASE Cname WHEN '資訊系統' THEN grade END) AS '資訊系統'
FROM StuGrade
GROUP BY Sname;
使用MAX()
SELECT
Sname,
MAX( CASE Cname WHEN '資料庫' THEN grade END) AS '資料庫',
MAX(CASE Cname WHEN '數學' THEN grade END) AS '數學' ,
MAX(CASE Cname WHEN '資訊系統' THEN grade END) AS '資訊系統'
FROM StuGrade
GROUP BY Sname;
因為SUM和MAX都是起到聚合作用,且滿足條件的只有一個值,所以兩者的效果是一樣的,結果如下: