select 
     case when t2.code =10 then 
                      case when t1.price_type=2 then '单价' 
                                                else '价格' 
                      end 
     ------------------------------------ 
     else case when t2.code = 20 
                      then t2.name||'(有或无或免)'  
     else t2.name
     end 
   
     end   
as name1,t2.type
 
 from  XXX t1,SSS t2 
  where  t1.id = t2.id and t1.object_id=99 --------------------
谁帮我排一下格式,嵌套的时候,我有点乱。

解决方案 »

  1.   


    SELECT CASE
              WHEN t2.code = 10
                 THEN CASE
                        WHEN t1.price_type = 2
                           THEN '单价'
                        ELSE '价格'
                     END
              ELSE CASE
              WHEN t2.code = 20
                 THEN t2.NAME || '(有或无或免)'
              ELSE t2.NAME
           END
           END AS name1,
           t2.TYPE
      FROM xxx t1, sss t2
     WHERE t1.ID = t2.ID AND t1.object_id = 99
      

  2.   


    SELECT CASE
              WHEN t2.code = 10
                 THEN 
                     CASE
                        WHEN t1.price_type = 2
                           THEN '单价'
                           ELSE '价格'
                     END
                 ELSE 
                     CASE
                        WHEN t2.code = 20
                           THEN t2.NAME || '(有或无或免)'
                           ELSE t2.NAME
                     END
           END AS name1,
           t2.TYPE
      FROM xxx t1, sss t2
     WHERE t1.ID = t2.ID AND t1.object_id = 99
      

  3.   

    select 
         case 
            when t2.code =10 then 
                 case when t1.price_type=2 then '单价'   else '价格'  end 
            else 
                 case when t2.code = 20  then t2.name||'(有或无或免)'  else t2.name end 
            end   
    as name1,t2.type
     from  XXX t1,SSS t2 
      where  t1.id = t2.id and t1.object_id=99 
      

  4.   


    select 
         case when t2.code =10 then 
                 case when t1.price_type=2 then '单价'   else '价格'  end 
         else 
                 case when t2.code = 20  then t2.name||'(有或无或免)'  else t2.name end 
         end   as name1,   t2.type
     from  XXX t1,SSS t2 
      where  t1.id = t2.id and t1.object_id=99 
      

  5.   

    select 
         case when t2.code =10 then 
              case when t1.price_type=2 then '单价' else '价格' end 
         else case when t2.code = 20 then 
              t2.name||'(有或无或免)' 
         else t2.name end
         end as name1,
         t2.type
    from  XXX t1,SSS t2 
    where  t1.id = t2.id and t1.object_id=99 
    其实要是看着不方便的话,可以考虑用一下Decode()函数
    select
    Decode(
          t2.code,
          10,Decode(t1.price_type,2,'单价','价格'),
          20,t2.name||'(有或无或免)',
          t2.name
          ) as name1,
    t2.type
    from  XXX t1,SSS t2 
    where  t1.id = t2.id and t1.object_id=99 
    这个SQL的执行效率可能会比上一个高一些