1. 程式人生 > >關於case when結合group by用時的寫法舉例

關於case when結合group by用時的寫法舉例

原表是個員工檔案,共583人,但case when結合group by用時,寫法不同,其出來的結果也不同

例1:

select distinct a.Branch,
case when kultur = '碩士' then sum(num) else '0' end as 研究生學歷,
case when kultur = '本科' then sum(num) else '0' end as 大本學歷,
case when kultur = '大專' then sum(num) else '0' end as 大專學歷,
case when kultur = '中專' then sum(num) else '0' end as 中專學歷,
case when kultur = '高中' or kultur ='職高' or kultur ='中職'  then sum(num) else '0' end as 高中學歷,
case when kultur = '初中' then sum(num) else '0' end as 初中學歷,
case when kultur = '小學' then sum(num) else '0' end as 小學學歷,
case when kultur = '' or kultur is null  then sum(num) else '0' end as 未填寫學歷
from( select Branch,kultur,count(*) as num
        from tb_Stuffbusic
     group by branch,kultur) a
Group by a.Branch,a.kultur

結果如下圖:

例2:

select Branch as 部門名稱,count(branch) as 總人數,
sum(case when kultur = '碩士' then 1 else '0' end) as 研究生學歷,
sum(case when kultur = '本科' then 1 else '0' end) as 大本學歷,
sum(case when kultur = '大專' then 1 else '0' end) as 大專學歷,
sum(case when kultur = '中專' then 1 else '0' end) as 中專學歷,
sum(case when kultur = '高中' or kultur ='職高' or kultur ='中職'  then 1 else '0' end) as 高中學歷,
sum(case when kultur = '初中' then 1 else '0' end) as 初中學歷,
sum(case when kultur = '小學' then 1 else '0' end) as 小學學歷,
sum(case when kultur = '' or kultur is null  then 1 else '0' end) as 未填寫學歷
from tb_Stuffbusic         
group by branch

結果如下圖:

例3:表中ID欄位有時欄位值長不夠4位,但不能超過4位,故通過下面語句一次性加上。
UPDATE tb_Stuffbusic
SET ID = CASE WHEN LEN(ID) = 1 THEN '000'+ID
              WHEN LEN(ID) = 2 THEN '00'+ID
              WHEN LEN(ID) = 3 THEN '0'+ID
              ELSE ID
              END