sql与oracle中有关case和decode的用法(行转列)及比较

为了举例说明,这里创建了一张成绩表,如下图所示:

比较:

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;

结果如下:

转载地址:http://www.cnblogs.com/NothingIsImpossible/archive/2010/10/13/1850250.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值