1. 程式人生 > >數據庫復習總結(16)-case關鍵字(數據透視)

數據庫復習總結(16)-case關鍵字(數據透視)

isp b- event sub 多行 none 創建 pre group

case語法:

技術分享圖片

練習1:將性別的0、1顯示為男、女

技術分享圖片
select * from  StudentInfo
--case:對結果集中的列進行判斷
--例1:顯示學生信息,性別以"男女"顯示:
select *,
    case sGender 
    when 1 then 
    when 0 then  end as 性別
from StudentInfo
View Code

結果:

技術分享圖片

練習2:顯示成績為“優、良、中、差”

技術分享圖片
--例2:將學生分數顯示成等級 >=90 優,>=80 良,>=60 中,其它 差
select *, case when scoreValue>=60 and scoreValue<80 then when scoreValue>=90 then when scoreValue>=80 then else end as 等級 from ScoreInfo
View Code

技術分享圖片

練習3:統計學生的語文、數學、英語的成績(視圖、聚合函數)

技術分享圖片
--查詢學生姓名、科目名稱、成績(構建視圖)
--行轉列(數據透視)
    --統計學生的語文、數學、英語的成績
create view Student_Score as select stu.sName,sub.sTitle,score.scoreValue from ScoreInfo score inner join SubjectInfo sub on sub.sId=score.subId inner join StudentInfo stu on stu.sId=score.stuId select * from Student_Score --查詢視圖 例子 --姓名 語文 數學 英語 --小籠包 100 89 92.5 --數據透視(行轉列,列轉行)
select sName 姓名, --如果當前的STitle的值是"語文",則輸出ScoreValue case sTitle when 語文 then scoreValue end 語文, case when sTitle=數學 then scoreValue end 數學, case sTitle when 英語 then scoreValue end 英語 from Student_Score select sName 姓名, --如果當前的STitle的值是"語文",則輸出ScoreValue --多行合並成一行(聚合函數) max(case sTitle when 語文 then scoreValue end) 語文, min(case when sTitle=數學 then scoreValue end) 數學, sum(case sTitle when 英語 then scoreValue end) 英語 from Student_Score group by sName
View Code

技術分享圖片

練習:數據透視

技術分享圖片
 --班級  男生  女生
--    青龍     1      2
--1、創建視圖
create view Student_Class_Gender
as
select cTitle,sGender,COUNT(*) as count1
from StudentInfo stu
inner join ClassInfo class on stu.cid=class.cId
group by cTitle,sGender

select * from Student_Class_Gender
--2、轉換
--轉換
--數據透視(行轉列)
select cTitle,
case sGender when 1 then count1 else 0 end 男,
case when sGender=0 then count1 else 0 endfrom Student_Class_Gender

--3、合並
select cTitle,
max(case sGender when 1 then count1 else 0 end) 男,
max(case when sGender=0 then count1 else 0 end) 女
from Student_Class_Gender
group by cTitle
View Code

技術分享圖片

數據庫復習總結(16)-case關鍵字(數據透視)