Oracle中使用decode优雅的行转列

33次阅读

共计 594 个字符,预计需要花费 2 分钟才能阅读完成。

Oracle 中使用 decode 优雅的行转列

最近笔者在工作中终于还是碰到了行转列的应用场景,做一下笔记供自己查看和帮助有需求的人。

在其他关系数据库中,大多推荐用 case when then end 这种臃肿复杂的写法,最近看到 oracle 数据库中独有的函数 decode 十分优雅,下面简单介绍一下。

decode函数

定义:

decode(条件, 值 1, 返回值 1, 值 2, 返回值 2,… 值 n, 返回值 n, 缺省值)

在代码中可以理解为:

if 条件 == 值 1:
    返回值 1
elif 条件 == 值 2:
    返回值 2
elif 条件 == 值 n:
    返回值 n
else:
    缺省值

在关系数据库中可以理解为:

case 条件
    when 值 1 then 返回值 1
    when 值 2 then 返回值 2
    when 值 n then 返回值 n
    else 缺省值 
end as 列

示例:

TYPE NAME CLASS NUM_FLAG
水果 香蕉 出售 50
水果 香蕉 剩余 23
水果 香蕉 单价 7
宠物 小猫 出售 3
宠物 小猫 剩余 5

SQL 语句:

SELECT TYPE,NAME
, SUM(DECODE(CLASS,'出售',NUM_FLAG,0)) AS 出售
, SUM(DECODE(CLASS,'剩余',NUM_FLAG,0)) AS 剩余
, SUM(DECODE(CLASS,'单价',NUM_FLAG,0)) AS 单价
FROM TEMP_TABLE 
GROUP BY TYPE,NAME

执行后效果

TYPE NAME 出售 剩余 单价
水果 香蕉 50 23 7
宠物 小猫 3 5 0

正文完
 0