如何在varchar2字段上使用lead()和lag()?

时间:2013-03-26 17:35:36

标签: sql oracle11g analytics sliding-window varchar2

Oracle 11g My work so far on SQL Fiddle

我在varchar2列上使用 lead() lag()函数。 使用以下规则,我想生成所需的结果。

  1. 如果lag_val为null,则为'('
  2. 如果lag_val与set_a相同,则为'和'
  3. 如果lag_val!= set_a则是'或'
  4. 如果lead_val为null,则为')'
  5. 当我使用nvl()转换空值以便我可以比较时,我得到'无效数字'。

    所需输出

       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>    )
    

1 个答案:

答案 0 :(得分: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