T-SQL高級篇-- case when then else end用法

select s.MountingsName as '品名',s.TypeSpecification as '規格',s.MaterialCode as '物料代碼',s.Number as '庫存數',
CASE
WHEN s.IsSafeStock=0 THEN '不滿足'
WHEN s.IsSafeStock=1 THEN '滿足'
END as '是否滿足安全庫存' 
from CommonlyUsedAccessories as c left join Stock_Information as s on c.CuaId=s.MaterialCode

  1.第一種寫法:

複製代碼

SELECT
    s.s_id,
    s.s_name,
    s.s_sex,
    CASE
WHEN s.s_sex = '1' THEN '男'
WHEN s.s_sex = '2' THEN '女'
ELSE '其他'
END as sex,
 s.s_age,
 s.class_id
FROM
    t_b_student s
WHERE
    1 = 1

複製代碼

  2.第二種寫法

複製代碼

SELECT
    s.s_id,
    s.s_name,
    s.s_sex,
    CASE s.s_sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'
END as sex,
 s.s_age,
 s.class_id
FROM
    t_b_student s
WHERE
    1 = 1

複製代碼

兩個運行結果一樣:

  有一個需要注意的問題,Case函數只返回第一個符合條件的值,剩下的Case部分將會被自動忽略

二:分組

表數據:

t_b_population 

sql語句:

複製代碼

SELECT country,
    SUM(CASE WHEN p.sex = '1' THEN p.population ELSE 0 END) AS '男',
    SUM(CASE WHEN p.sex = '2' THEN p.population ELSE 0 END) AS '女'
FROM
    t_b_population p
GROUP BY country;

複製代碼

 運行結果:

表數據:

t_b_country 

sql語句:

複製代碼

SELECT
    SUM(c.population) AS '人口',
    CASE c.country
        WHEN '中國'   THEN '亞洲'
        WHEN '印度'   THEN '亞洲'
        WHEN '日本'   THEN '亞洲'
        WHEN '美國'   THEN '北美洲'
        WHEN '加拿大' THEN '北美洲'
        WHEN '墨西哥' THEN '北美洲'
 ELSE '其他' END AS '洲'
FROM
    t_b_country c
GROUP BY CASE c.country
        WHEN '中國'   THEN '亞洲'
        WHEN '印度'   THEN '亞洲'
        WHEN '日本'   THEN '亞洲'
        WHEN '美國'   THEN '北美洲'
        WHEN '加拿大' THEN '北美洲'
        WHEN '墨西哥' THEN '北美洲'
 ELSE '其他' END;

複製代碼

運行結果:

 

分類: 數據庫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章