在条件ORACLE中选择CASE语句

时间:2017-11-17 04:45:02

标签: oracle

我需要根据我的条件从表中选择一些记录。我只需要这样做。

SELECT g.intds_intratechange 
case when g.intds_intratechange='0.5% Up to 1%' 
then g.intds_intratechange='ddd' 
end
FROM glinfo.ref_tblintratefordesignation g
WHERE g.intds_designation =(select s.STR_OFF_TYPE from dpg.inf_responsible_maildetails s where s.STR_USER_CODE='10020336') 

在上表中,有3个值。 “0 t0 0.5”,“0.5到1”和“大于1”。 我需要从我的选择中过滤记录以符合上述值。如果值为“0到0.5”,则选择前10个记录。 需要一种方法来解决这个问题。这段代码说“无法从预期的关键字中获取”

1 个答案:

答案 0 :(得分:1)

您可以使用BETWEEN来检查这些条件。我假设您的g.intds_intratechange列末尾有'%'。如果可能不需要TRIM(g.intds_intratechange,'%')TO_NUMBER

SELECT 
        g.intds_intratechange,
        case    when TO_NUMBER(TRIM(g.intds_intratechange,'%'))  BETWEEN 0 AND 0.5 THEN 'ddd'
                when TO_NUMBER(TRIM(g.intds_intratechange,'%'))  BETWEEN 0.5 AND 1 THEN 'whatever_u_need'
                when TO_NUMBER(TRIM(g.intds_intratechange,'%'))  > 1  THEN 'whatever_u_need'
        end name_of_new_col
FROM 
        glinfo.ref_tblintratefordesignation g
WHERE   g.intds_designation IN 
        (select 
                s.STR_OFF_TYPE 
        from 
                dpg.inf_responsible_maildetails s 
        where   s.STR_USER_CODE='10020336' 
        );
  

如果值是" 0到0.5"然后选择前10条记录。需要一种方法   解决这个问题。

不完全清楚你的意思。请在问题中添加更多详细信息。