數據庫復習總結(16)-case關鍵字(數據透視)
阿新 • • 發佈:2018-01-02
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 StudentInfoView Code
結果:
練習2:顯示成績為“優、良、中、差”
--例2:將學生分數顯示成等級 >=90 優,>=80 良,>=60 中,其它 差View Codeselect *, case when scoreValue>=60 and scoreValue<80 then ‘中‘ when scoreValue>=90 then ‘優‘ when scoreValue>=80 then ‘良‘ else ‘差‘ end as 等級 from ScoreInfo
練習3:統計學生的語文、數學、英語的成績(視圖、聚合函數)
--查詢學生姓名、科目名稱、成績(構建視圖) --行轉列(數據透視) --統計學生的語文、數學、英語的成績View Codecreate 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
練習:數據透視
--班級 男生 女生 -- 青龍 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 end 女 from 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 cTitleView Code
數據庫復習總結(16)-case關鍵字(數據透視)