/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* @author Alan
* @Email no008@foxmail.com


复制代码
  1 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
  2 【功能】根据条件返回相应值
  3 【参数】c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null
  4 注:值1……n 不能为条件表达式,这种情况只能用case when then end解决
  5 
  6 ·含义解释:
  7   decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
  8   该函数的含义如下:
  9   IF 条件=值1 THEN
 10   RETURN(翻译值1)
 11   ELSIF 条件=值2 THEN
 12   RETURN(翻译值2)
 13   ......
 14   ELSIF 条件=值n THEN
 15   RETURN(翻译值n)
 16   ELSE
 17   RETURN(缺省值)
 18   END IF
 19 
 20 或:
 21   when case 条件=值1 THEN
 22   RETURN(翻译值1)
 23   ElseCase 条件=值2 THEN
 24   RETURN(翻译值2)
 25   ......
 26   ElseCase 条件=值n THEN
 27   RETURN(翻译值n)
 28   ELSE
 29   RETURN(缺省值)
 30   END
 31 
 32 
 33 【示例】
 34   ·使用方法:
 35   1、比较大小
 36   select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
 37   sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
 38   例如:
 39   变量1=10,变量2=20
 40   则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
 41 
 42   2、表、视图结构转化
 43   现有一个商品销售表sale,表结构为:
 44   month    char(6)      --月份
 45   sell    number(10,2)   --月销售金额  
 46   现有数据为:
 47   200001  1000
 48   200002  1100
 49   200003  1200
 50   200004  1300
 51   200005  1400
 52   200006  1500
 53   200007  1600
 54   200101  1100
 55   200202  1200
 56   200301  1300
 57 
 58   想要转化为以下结构的数据:
 59   year   char(4)      --年份
 60   month1  number(10,2)   --1月销售金额
 61   month2  number(10,2)   --2月销售金额
 62   month3  number(10,2)   --3月销售金额
 63   month4  number(10,2)   --4月销售金额
 64   month5  number(10,2)   --5月销售金额
 65   month6  number(10,2)   --6月销售金额
 66   month7  number(10,2)   --7月销售金额
 67   month8  number(10,2)   --8月销售金额
 68   month9  number(10,2)   --9月销售金额
 69   month10  number(10,2)   --10月销售金额
 70   month11  number(10,2)   --11月销售金额
 71   month12  number(10,2)   --12月销售金额
 72 
 73   结构转化的SQL语句为:
 74 
 75   create or replace view
 76   v_sale(year,month1,month2,month3,month4,month5,month6,
 77   month7,month8,month9,month10,month11,month12)
 78   as
 79   select
 80   substrb(month,1,4),
 81   sum(decode(substrb(month,5,2),'01',sell,0)),
 82   sum(decode(substrb(month,5,2),'02',sell,0)),
 83   sum(decode(substrb(month,5,2),'03',sell,0)),
 84   sum(decode(substrb(month,5,2),'04',sell,0)),
 85   sum(decode(substrb(month,5,2),'05',sell,0)),
 86   sum(decode(substrb(month,5,2),'06',sell,0)),
 87   sum(decode(substrb(month,5,2),'07',sell,0)),
 88   sum(decode(substrb(month,5,2),'08',sell,0)),
 89   sum(decode(substrb(month,5,2),'09',sell,0)),
 90   sum(decode(substrb(month,5,2),'10',sell,0)),
 91   sum(decode(substrb(month,5,2),'11',sell,0)),
 92   sum(decode(substrb(month,5,2),'12',sell,0))
 93   from sale
 94   group by substrb(month,1,4);
 95 
复制代码
posted @   一品堂.技术学习笔记  阅读(341)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示