Oracle 11g My work so far on SQL Fiddle
我在varchar2列上使用 lead()和 lag()函数。 使用以下规则,我想生成所需的结果。
当我使用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> )
答案 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