一张商品价格表,一列为价格,请这个显示:如果价格在10-20中间,请显示“10-20”,如果价格为空,请显示“unkown”,其他的价格则显示“other”select decode(price,price>10 && price<20 ,"10-20",null,"unkown","other")
from price_table请问这样写对么?

解决方案 »

  1.   

    这个得用case...when 来写吧
      

  2.   

    select (case when price>10 and price <20  then '10-20'
                when price is null then 'unkown'
                other 'other' end)price
    from price_table 
      

  3.   

    SELECT (CASE
             WHEN price > 10 AND price < 20 THEN
              '10-20'
             WHEN price IS NULL THEN
              'unkown'
             ELSE
              'other'
           END) price
      FROM price_table
      

  4.   

    decode是等值判定
    不过如果加上另一个oracle函数可以判定大小,那个函数名忘了
    功能大概是如果是正数为1
    如果是0为0
    如果是负数为-1
    这样也可以做
      

  5.   

    如果题目改为
    一张商品价格表,一列为价格,请这个显示:如果价格为空,请显示“unkown”,其他的价格则显示“other” select decode(price,null,'unknown','other') from price_table这样写对么?
      

  6.   

    CASE WHEN 是标准的sql还是oracle自己有的?
      

  7.   

    case 语句是Oracle的,sql标准里没有。最好不要用case,一般用if…else完全可以代替。
      

  8.   


    SELECT (CASE price
            WHEN price > 10 AND price < 20 THEN 
              '10-20' 
            WHEN price IS NULL THEN 
              'unkown' 
            ELSE 
              'other' 
          END) price 
      FROM price_table
    那个case后如果加上price对不对呢?
      

  9.   

    如果用if else  这个语句怎么写呢?
      

  10.   

    SELECT (CASE price 
            WHEN price > 10 AND price < 20 THEN 
              '10-20' 
            WHEN price IS NULL THEN 
              'unkown' 
            ELSE 
              'other' 
          END) price 
      FROM price_table 
    那个case后如果加上price对不对呢?
      

  11.   

    select (case when price>10 and price <20  then '10-20' 
                when price is null then 'unkown' 
                other 'other' end)price 
    from price_table 
      

  12.   


    select nvl(decode(sign(price,10),1,decode(sign(price,20),-1,'10-20','other'),'other'),'unkown') from  price_table 
      

  13.   


    不好意思,写错了
    select nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown') from  tb_price; 
    这样就可以了,不过还是用case比较好些
      

  14.   

    我是觉得整个结构就不对,如果price 为 9, sign(price,10)就不成立, 那不就等于  unkown了?
      

  15.   

    select nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown') from  tb_price; 
    这样就可以了,不过还是用case比较好些如果price 为 9 还是等于price 没有变化 再用nvl判断是否等于null 
    实现的功能和case一样的
      

  16.   


    不好意思这个没有实现=other
    select decode(nvl(decode(sign(price-10),1,decode(sign(price-20),-1,'10-20',price),price),'unkown'),'10-20','10-20','unkown','unkown','other') from price套用的层次太多了,还是用case比较好