在表 oracle 上使用大小写从同一行中选择值

Posted

技术标签:

【中文标题】在表 oracle 上使用大小写从同一行中选择值【英文标题】:select value from same row using case on table oracle 【发布时间】:2016-02-01 07:52:04 【问题描述】:

我在 oracle 中有一张这样的表:

然后我想选择 customer_type 和名为“customer_id”的新列。如果 customer_type 为 'CORPORATE',则 'customer_id' 列将填充shipper_id,否则如果 customer_type 为 'RETAIL',则列 ('customer_id') 将填充shipper_phone。

这是我的查询:

select 
shipper_id,
shipper_name, 
customer_type,
case customer_type when 'RETAIL' then shipper_phone
when 'CORPORATE' then shipper_id
else 'Y'
from 
connote c 
inner join 
mst_customer mc 
on c.shipper_id = mc.customer_id ;

【问题讨论】:

【参考方案1】:

您在 CASE 语句中缺少 END 关键字:

SELECT shipper_id,
  shipper_name,
  customer_type,
  CASE customer_type
    WHEN 'RETAIL'
    THEN shipper_phone
    WHEN 'CORPORATE'
    THEN shipper_id
    ELSE 'Y'
  END
FROM connote c
INNER JOIN mst_customer mc
ON c.shipper_id = mc.customer_id;

同样可以使用 DECODE 编写:

SELECT shipper_id,
  shipper_name,
  customer_type,
  DECODE(customer_type, 
         'RETAIL',
          shipper_phone,
         'CORPORATE',
          shipper_id,
         'Y')
FROM connote c
INNER JOIN mst_customer mc
ON c.shipper_id = mc.customer_id;

【讨论】:

以上是关于在表 oracle 上使用大小写从同一行中选择值的主要内容,如果未能解决你的问题,请参考以下文章

替换 0 并从同一行的列中向前填充 [重复]

ClickHouse:从同列名的select中访问源列

从同一行电源查询中获取列

在表 Oracle DB 上执行的最后一个 DDL

按非主键属性分组 min(Value) 并从同一行加入附加属性(使用原始 SQL 或 SQLalchemy)

如何在 Oracle 11g 中使用游标在表中插入数据?