case when..[字段A]=1
then..[输出值1]
else..[输出值2]
end
意思是:当字段A=1时输出值1 ,否则输出值2,结束
CASE..WHEN函数还能一直扩展,例如
SELECT
CASE
WHEN L.item_desc in ( '石墨纸F03510THP30-SGL','石墨纸 0.35mm 20ppm') THEN
'0.35mm'
WHEN L.ITEM_DESC in( '石墨纸 F02510THP30-SGL','石墨纸0.25*500*500mm','石墨纸0.25*500*600-MES') THEN
'0.25mm'
ELSE
null
END HDD,l.item_desc,L.ITEM_TYPE_DESC2 FROM ITEM_MASTER L
输出结果:
可以同时写好几个when来判断,和decode()函数有相似之处.
和DECODE()搭配
这两个函数也可以搭配使用,例如:
SELECT
CASE
WHEN L.ITEM_TYPE_DESC2 IN('坩埚','保密坩埚') THEN
L.ITEM_TYPE_DESC2
WHEN L.ITEM_TYPE_DESC ='石墨纸' THEN
DECODE(L.ITEM_DESC,'石墨纸F03510THP30-SGL','0.35MM',
'石墨纸 F02510THP30-SGL','0.25MM','其他')
END hdd
from item_master l
输出结果如图:
该段代码的意思是,
当 item_type_desc字段的值为坩埚和保密坩埚时,
原样输出,
当item_type_desc字段的值为石墨纸时,
将输出的字段item_desc再进行判断,当item_desc的值为‘石墨纸F03510THP30-SGL’输出0.35,值为‘石墨纸 F02510THP30-SGL’输出0.25,
最后结束,将输出的列,重命名为hdd
和floor(),mod(),round()函数搭配
和时间函数搭配使用,用来计算时间,例如:
SELECT
CASE
WHEN T.CRYSTAL_PRO_DATE IS NULL THEN
NULL
WHEN T.PLAN_CRYSTAL_PRO_DATE IS NULL THEN
NULL
ELSE
FLOOR(ROUND((T.CRYSTAL_PRO_DATE - T.PLAN_CRYSTAL_PRO_DATE) * 24) / 24) || '天' ||
ROUND(MOD((T.CRYSTAL_PRO_DATE - T.PLAN_CRYSTAL_PRO_DATE) * 24, 24),1) || '小时'
END DATE_DIFF_3 FROM INVENTORY_CLEAN_WAFER_MASTER T
输出结果:
该段代码在计算时间时先对时间列进行不为空的判断,在进行计算。
CASE..WHEN函数很简单也是常用的函数,写代码时也可以将该函数与其他函数搭配,代码运行效率会高很多。