0

Oracle11g これまでのSQLFiddleでの作業

varchar2列でlead( )関数とlag()関数を使用しています。次のルールを使用して、目的の結果を生成したいと思います。

  1. lag_valがnullの場合、'('
  2. lag_valがset_aと同じ場合、'および'
  3. lag_val!= set_aの場合、'または'
  4. Lead_valがnullの場合、')'

nvl()を使用してnull値を変換すると、「無効な数値」が発生するため、比較できます。

必要な出力

   SEQNO SET_A LAG_VAL  LEAD_VAL  MENU_ENTRY
   ------------------------------------------
   1      CAKE  <null>  CAKE      (
   2      CAKE  CAKE    BEER      AND
   3      BEER  CAKE    BRATS     OR
   4      BRATS BEER    <null>    )
4

1 に答える 1

1

問題は、リード/ラグではなく、文字列に「-」演算子を使用していることです。私はあなたがこれを望んでいると思います:

select  seqno,
         set_a,
         lag_val,
         lead_val
    , case 
    when (lag_val ) is null then '('
    when (lead_val ) is null then ')'
    when (lag_val = set_a) then 'and'    
    else  'or'
    end  as menu_entry
from ( select seqno, 
        set_a, 
        lag(set_a,1) over (order by seqno) as lag_val,
--        lag(to_number,'XX') over (order by seqno) as lag_val,
        lead(set_a,1) over (order by seqno) as lead_val       
 from menu_items)
order by seqno
于 2013-03-26T18:08:53.483 に答える