oracle中有关case和decode的用法

«博客园首页
sql与oracle中有关case和decode的用法(行转列)及比

作者:NerverQuit来源:博客园发布时间:2010-10-13 16:24 阅读:982 次原文链接[收藏]引:
为了举例说明,这里创建了一张成绩表,如下图所示:
比较:
1、sql中,这两个函数我们仅能使用case,代码及结果如下:
select name,
case Subject
when '语文' then 1
when '数学' then 2
when '英语' then 3 --else 3
end as '科目代码'
from Results
同样的,我们可以用case实现行转列,代码及结果如下:
select Name,
sum(case when Subject='语文' then Result end) '语文',
sum(case when Subject='数学' then Result end) '数学',
sum(case when Subject='英语' then Result end) '英语'
from Results
group by Name
2、但是,在oracle中,这两个函数我们都可以使用,代码及结果如下:
decode用法:select Name,decode(Subject,'语文',1,'数学',2,'英语',3) 科目代码from results;
select Name,decode(Subject,'语文',1,'数学',2,3) 科目代
码 from Results;
case用法:
select name,
case
when Subject='语文' then 1
when Subject='数学' then 2
when Subject='英语' then 3 --else 3
end as 科目代码
from Results;
这两种方法均能达到同样的结果:
同样的,我们可以使用这两个函数实现行转列,代码及结果如下:
decode:
select
Name,
sum(decode(Subject,'语文',Result,0)) 语文,
sum(decode(Subject,'数学',Result,0)) 数学,
sum(decode(Subject,'英语',Result,0)) 英语
from Results
group by Name;
case:
select
Name,
sum((case when Subject='语文' then Result else 0 end)) 语文,
sum((case when Subject='数学' then Result else 0 end)) 数学,
sum((case when Subject='英语' then Result else 0 end)) 英语
from Results
group by Name;
数据库表与行转列的中间结果(想想还是也附上)
oracle中:
select
Name,
decode(Subject,'语文',Result,0) 语文,
decode(Subject,'数学',Result,0) 数学,
decode(Subject,'英语',Result,0) 英语
from Results;

select
Name,
(case when Subject='语文' then Result else 0 end) 语文,
(case when Subject='数学' then Result else 0 end) 数学,
(case when Subject='英语' then Result else 0 end) 英语
from Results;
结果如下:
以上内容,不对的地方请指正。

此文仅想抛砖引玉...
(续)
SQL2000中动态SQL
declare @sql varchar(8000)
set @sql = 'select name '
select @sql = @sql + ' , sum(case Subject when '+ char(39) + Subject + char(39) +' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from results) as a
set @sql = @sql + ' from results group by name'
exec(@sql)
SQL2005中动态SQL
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + Subject from Results group by Subject
set @sql = '[' + @sql + ']'
exec ('select * from Results pivot (max(result) for subject in (' + @sql + ')) b')
》点击查看原文...
程序员找工作,就在博客园。

合集下载

Oracle中decode函数用法

Oracle中decode函数用法

Oracle中decode函数⽤法1.decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IF⽰例:SELECT ID,DECODE(inParam,'para1','值1' ,'para2','值2','para3','值3','para4','值4','para5','值5') name FROM bank #如果第⼀个参数inParam=='para1'那么那么select得到的那么显⽰为值1;#如果第⼀个参数inParam=='para2'那么那么select得到的那么显⽰为值2;#如果第⼀个参数inParam=='para3'那么那么select得到的那么显⽰为值3;#如果第⼀个参数inParam=='para4'那么那么select得到的那么显⽰为值4;#如果第⼀个参数inParam=='para5'那么那么select得到的那么显⽰为值5;#都不相等就为''2.decode(字段或字段的运算,值1,值2,值3)这个函数运⾏的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多⽰例:SELECT ID,DECODE(inParam,'beComparedParam','值1' ,'值2') name FROM bank#如果第⼀个参数inParam=='beComparedParam',则select得到的name显⽰为值1,#如果第⼀个参数inParam!='beComparedParam',则select得到的name显⽰为值2select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较⼩值sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1例如:变量1=10,变量2=20则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较⼩值的⽬的。

oracle case语句用法举例说明

oracle case语句用法举例说明

oracle case语句用法举例说明嘿,咱今儿就来唠唠这个 Oracle CASE 语句的用法!比如说吧,你
在处理一堆数据的时候,就好像你面前有一堆各种各样的水果。

CASE 语句就像是一个超级智能的分类机器。

假设你有苹果、香蕉、橘子这些水果。

你可以用 CASE 语句来根据不同的水果做不同的处理呀!
比如说,当遇到苹果的时候,你就可以说:“哇哦,这是我最喜欢
的苹果呀!”这就好像在 CASE 语句里,当某个条件满足时,执行特定
的代码块。

再举个例子,当你看到香蕉,你可能会想:“嘿嘿,香蕉可以做个
香蕉奶昔呢!”这就如同在 CASE 语句中针对不同的情况进行不同的操作。

咱来具体看看代码里是咋用的哈。

就像这样:
```sql
SELECT
CASE fruit
WHEN 'apple' THEN '这是苹果哦'
WHEN 'banana' THEN '这是香蕉呀'
ELSE '其他水果呢'
END AS fruit_description
FROM
your_table;
```
你看,这多清楚明了呀!是不是就像你很明确地知道每个水果该怎么对待一样?
Oracle 的 CASE 语句真的超级实用呢!它能让你的代码变得更加灵活、高效,就像给你的程序装上了翅膀一样!它能处理各种复杂的情况,让你在编程的天空中自由翱翔!不管是处理数据还是做各种逻辑判断,它都能大显身手。

所以呀,咱可得好好掌握这个厉害的家伙,让它为我们的编程之路助力呀!反正我是觉得它超棒的,你呢?。

oracle decode的用法

oracle decode的用法

oracle decode的用法Oracle中的DECODE函数是一种多功能的函数,它可以根据输入的条件返回不同的结果。

它的基本语法如下:```sqlDECODE(expression, search1, result1, search2, result2, ..., default)```这个函数的参数包括:* `expression`:要进行比较的表达式或列。

* `search1, search2, ...`:要搜索的值。

可以指定多个搜索值,每个搜索值之间用逗号分隔。

* `result1, result2, ...`:如果找到了匹配的搜索值,则返回对应的结果。

同样,每个结果之间用逗号分隔。

* `default`:可选参数,指定当没有找到匹配的搜索值时返回的默认结果。

如果省略此参数,则返回NULL。

DECODE函数的工作原理是,从左到右比较`expression`和每个搜索值。

如果找到匹配的值,则返回对应的结果。

如果没有找到匹配的值,则继续比较下一个搜索值。

如果没有找到匹配的值,则返回默认结果(如果有提供默认值)。

下面是一个使用DECODE函数的例子:```sqlSELECT name, DECODE(department_id, 10, 'Finance', 20, 'HR', 30, 'Marketing', 'Other') AS department FROM employees;```这个查询将返回一个包含员工姓名和部门的列表。

对于每个员工,DECODE函数将根据部门ID查找对应的结果。

如果部门ID是10,则返回'Finance';如果部门ID是20,则返回'HR';如果部门ID是30,则返回'Marketing';否则返回'Other'。

oracle的decode用法

oracle的decode用法

oracle的decode用法Oracle的DECODE用法在Oracle数据库中,DECODE函数是一个非常强大且常用的函数,用于在查询中进行条件判断和值替换。

下面我们将详细介绍一些DECODE函数的常见用法:1. 简单条件替换DECODE函数最基本的用法是用于条件判断和值替换。

它的语法如下:DECODE(expression, search_value, replacement_value[, search_value, replacement_value, ...], default_value)expression表示需要进行条件判断的表达式,search_value表示条件值,replacement_value表示当expression等于search_value时要返回的值。

可以根据需要指定多对search_value和replacement_value,最后的default_value表示当没有匹配的条件时的默认返回值。

下面是一个示例,将给定员工的工资等级进行替换:SELECT DECODE(salary, 1000, '低', 3000, '中', 5000, '高', '未知') AS salary_levelFROM employees;上述语句中的salary是一个表达式,1000、3000、5000是要进行匹配的条件值,'低'、'中'、'高'是对应条件值的替换值。

如果salary等于这些条件值之一,则返回对应的替换值;如果都不匹配,则返回'未知'。

2. 多条件替换除了简单的条件判断,DECODE函数还可以处理多个条件的情况。

可以在参数列表中按照顺序给定多对search_value和replacement_value,当expression等于某个search_value时,返回相应的replacement_value。

oracle里decode的用法(一)

oracle里decode的用法(一)

oracle里decode的用法(一)Oracle里DECODE的用法DECODE函数是Oracle数据库中用来进行条件判断和返回结果的函数之一。

它的语法格式如下:DECODE (expression, search1, result1, search2, resu lt2, ..., default_result)在这个语法中,expression是一个表达式或者列,用来进行条件判断。

search1, search2等是expression可能的取值,result1, result2等是对应的返回结果。

default_result是一个可选参数,用来指定当expression不匹配任何search值时的默认返回结果。

下面是一些常见的DECODE函数的用法:1. 简单条件判断DECODE函数可以根据表达式的值来返回不同的结果。

例如:SELECT DECODE(1, 1, 'One', 2, 'Two', 'Other') AS re sultFROM dual;这个例子中,表达式1的值与第一个search值1相匹配,因此返回结果为’One’。

2. 嵌套条件判断我们也可以在DECODE函数中嵌套使用其他DECODE函数,来实现更复杂的条件判断。

例如:SELECT DECODE(1, 1, 'One', 2, DECODE(3, 3, 'Three','Other'), 'Other') AS resultFROM dual;在这个例子中,当表达式1的值为1时,返回结果为’One’;当表达式1的值为2时,再进行一次嵌套的条件判断,如果表达式3的值为3,则返回结果为’Three’,否则返回结果为’Other’。

3. 判断NULL值DECODE函数也可以用来判断表达式的值是否为NULL。

例如:SELECT DECODE(NULL, NULL, 'NULL Value', 'Not NULL V alue') AS resultFROM dual;在这个例子中,表达式为NULL,与第一个search值NULL相匹配,因此返回结果为’NULL Value’。

oracle decode()用法

oracle decode()用法

oracle decode()用法Oracle编程中,decode()函数是一种常见且实用的函数,用于在查询语句中进行条件判断和数值转换。

decode()函数可以根据给定的条件和返回值来对数据进行逻辑判断和转换。

在本文中,我们将详细介绍Oracle decode()函数的用法及其实际应用。

一、基本语法Oracle decode()函数的基本语法如下所示:decode(expr, search1, result1, search2, result2, ..., default)其中,expr为要进行比较的表达式,search1、search2等为多个可能的比较结果,result1、result2等为对应的返回结果。

default为可选参数,用于指定在没有匹配结果时的默认返回值。

例如,我们可以使用decode()函数将成绩(score)转换为等级:SELECT id, score, DECODE(score, 90, 'A', 80, 'B', 70, 'C', 'D') ASgradeFROM students;上述查询将根据score的值来转换为对应的等级,以grade作为列名返回。

二、实际用例1. 查询使用decode()函数进行逻辑判断和数值转换假设我们有一个订单表(orders),其中的payment_status字段记录了订单的付款状态,0代表未付款,1代表已付款。

我们可以使用decode()函数查询未付款订单(payment_status为0)的总数:SELECT COUNT(*) AS unpaid_ordersFROM ordersWHERE DECODE(payment_status, 0, 1, 1, 0) = 1;在查询语句中,我们使用decode()函数将0转换为1,1转换为0,然后将结果与1进行比较,找出未付款的订单。

oracledecode用法

oracledecode用法Oracle中的DECODE函数是一种条件判断函数,用于在查询结果中根据指定的条件和值进行转换或者判断,并返回结果。

DECODE函数能够在查询结果中替代使用IF-ELSE语句的场景,使得查询语句更加简洁和易于阅读。

在本文中,我将详细介绍DECODE函数的用法和示例。

DECODE函数的语法如下:DECODE(expr, search1, result1, search2, result2, ..., default)其中- expr是需要进行条件判断的表达式或者列名;- search1, search2, ...是用于匹配的表达式或者列名;- result1, result2, ...是与匹配表达式相匹配时返回的结果;- default是可选的,默认值,在expr不匹配任何search表达式时将返回default。

下面是DECODE函数的具体用法和示例:1.基本用法DECODE函数基本上是一个多路分支条件判断语句,可以根据指定的条件和值返回结果。

下面是一个基本的DECODE函数示例:SELECT name, age, DECODE(age, 18, '成年', 16, '未成年', '其他') AS statusFROM employees;在这个示例中,我们根据age的值进行判断。

如果age等于18,则返回'成年';如果age等于16,则返回'未成年';否则返回'其他'。

2.DECODE函数的嵌套使用DECODE函数可以嵌套使用,以实现更加复杂的条件判断逻辑。

下面是一个DECODE函数嵌套使用的示例:SELECT name, score,DECODE(score,100,'满分',90,'优秀',80,'良好',70,'及格',DECODE(score/10,9,'优秀',8,'良好',7,'及格','不及格'AS gradFROM students;在这个示例中,我们根据score的值进行判断。

oracle decode 函数用法

oracle decode 函数用法Oracle中的“decode”是一个非常强大的函数,可以在查询数据时根据条件对数据进行分类和选择,从而实现更为灵活的查询。

decode函数的具体用法在Oracle中被广泛应用,下面就为大家详细介绍一下。

基本语法首先看一下decode函数的基本语法:decode(expr, search1, result1, search2,result2, ..., default)其中,expr是要进行比较的表达式,search1、search2等都是要进行匹配的值,result1、result2等是与之匹配的结果。

而default则是默认值,当expr没有匹配项时,将返回default的结果。

1、基本用法首先来看一个最基本的用法,例如:SELECT DECODE(2, 1, 'One', 2, 'Two', 'Other')FROM DUAL;在这个例子中,2被作为expr,而1和2被作为搜索的值,'one'和'Two'被作为结果。

由于expr的值为2,它与第二个搜索的值相匹配,所以结果为“Two”。

2、多个搜索值的用法decode函数可以根据多个不同的搜索值对expr的值进行判断。

例如:3、使用NULL作为搜索值decode函数可以使用NULL作为搜索值。

例如:在这个例子中,使用NULL作为第一个搜索值,因此结果为“Blank”。

4、默认返回值当expr的值与所有搜索值都不匹配时,可以使用默认返回值,例如:在这个例子中,由于expr的值与所有搜索值都不相等,因此将返回默认值“Other”。

5、比较字符值(注:在进行字符串的比较时,大小写是不区分的)6、嵌套的用法可以将decode函数作为另一个decode函数的结果而嵌套使用,例如:在这个例子中,由于第一个decode函数匹配,因此第二个decode函数被执行。

oracle decode 用法

oracle decode 用法Oracle DECODE函数的基本用法•使用DECODE函数可以根据给定的条件返回对应的值。

•DECODE函数的语法为:DECODE(表达式, 条件1, 结果1, 条件2, 结果2, …, 默认结果)。

•当表达式的值与某个条件匹配时,DECODE函数会返回对应的结果值,否则返回默认结果。

DECODE函数的简单用法•DECODE函数可以用于实现简单的条件判断。

•例如,可以使用DECODE函数将数字转换为对应的英文单词。

•示例代码:SELECT DECODE(1, 1, 'One', 2, 'Two', 'Other') AS Re sult FROM DUAL;•运行结果:Result为’One’。

DECODE函数的多条件用法•DECODE函数也可以根据多个条件来返回对应的结果。

•示例代码:SELECT DECODE(2, 1, 'One', 2, 'Two', 3, 'Three', 'O ther') AS Result FROM DUAL;•运行结果:Result为’Two’。

DECODE函数的嵌套用法•DECODE函数可以嵌套使用,实现更复杂的条件判断。

•示例代码:SELECT DECODE(DECODE(1, 1, 1, 2), 1, 'One', 2, 'Two ', 'Other') AS Result FROM DUAL;•运行结果:Result为’One’。

DECODE函数的应用场景•DECODE函数可以用于根据特定条件返回不同的结果值,适用于各种条件判断的场景。

•例如,可以使用DECODE函数根据产品类型返回不同的折扣率,或者根据年龄段返回不同的收费标准等。

DECODE函数的注意事项•DECODE函数的参数个数应为奇数个,最后一个参数为默认结果。

Oracle中函数的使用

Oracle中函数的使⽤ 1.decode () 例⼦:它的写法如下decode('a','b','c','d'),其中a,b,c,d可以是其他函数也可以是数值,依据我们⾃⼰的情况来使⽤,它的含义是如果a=b,那么结果显⽰c,否则d。

翻译成我们更通俗易懂的话就是:if(sex=1)then return '男'elsereturn ‘⼥’decode(sex,1,'男','⼥‘’) ⽤法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表⽰如果value 等于if1时,DECODE函数的结果返回then1,...,如果不等于任何⼀个if值,则返回else。

初看⼀下,DECODE 只能做等于测试,但刚才也看到了,我们通过⼀些函数或计算替代value,是可以使DECODE函数具备⼤于、⼩于或等于功能。

 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IF该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IF2.case ()⽤法:case when 'a' then 'b' else 'c' end例⼦1:case when sex=1then '男'else '⼥'end例⼦2:CASE WHEN sex=1THEN (case when age>=18then '成年男⼈'else ‘未成年男孩’end)ELSE (case when age>=18then '成年⼥⼈'else '未成年⼥孩'3.concat(a,b)⽤法:拼接字符串例⼦:concat(a,’%’)给a加上%号连接多个字符串⽤||select title,concat(round((retail-cost)/cost*100),'%') from Tbl_Books;select Category || ' - ' || Title as 图书类别 from tbl_books;4.round(a,b)截取数字格式如下:ROUND(number[,decimals])其中:number 待做截取处理的数值decimals 指明需保留⼩数点后⾯的位数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档