sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
2. 自定义排序
WITH a AS (
SELECT 'a' T FROM DUAL UNION ALL
SELECT 'b' FROM DUAL UNION ALL
SELECT 'c' FROM DUAL)
SELECT * FROM A ORDER BY DECODE(T, 'a', 1, 'c', 2, 'b', 3)
3. 代替case、if/else
decode(表达式,值1,结果1,值2,结果2,默认值)
要说明的是,表达式与结果都可以为子查询语句。
4. 使用decode进行分组统计,行转列分组统计
WITH test AS(
SELECT 'A' 科室,'药费' 费用类别,10 费用 FROM dual UNION ALL
SELECT 'B' ,'药费' ,20 FROM dual UNION ALL
SELECT 'C' ,'药费' ,20 FROM dual UNION ALL
SELECT 'A' ,'耗材' ,10 FROM dual UNION ALL
SELECT 'B' ,'耗材' ,20 FROM dual UNION ALL
SELECT 'C' ,'耗材' ,20 FROM dual UNION ALL
SELECT 'A' ,'麻醉' ,10 FROM dual UNION ALL
SELECT 'B' ,'麻醉' ,20 FROM dual UNION ALL
SELECT 'C' ,'麻醉' ,20 FROM dual UNION ALL
SELECT 'C' ,'手术' ,20 FROM dual UNION ALL
SELECT 'C' ,'药费' ,10 FROM dual
)
SELECT 科室,
SUM(DECODE(费用类别, '药费', 费用, 0)) 药费,
SUM(DECODE(费用类别, '耗材', 费用, 0)) 药费,
SUM(DECODE(费用类别, '药费' ,0, '耗材', 0, 费用)) 其他
FROM TEST
GROUP BY 科室;
本文详细介绍了SQL DECODE函数的作用、语法、应用案例,包括比较大小、自定义排序、替代CASE/IF语句、分组统计等,并通过实例展示了如何在实际场景中运用DECODE函数。
783

被折叠的 条评论
为什么被折叠?



