2010-05-21 55 views
1

我正在尝试创建一个函数来重新创建一个值。从With子句返回一行

在我的功能我有这样的脚本:

WITH t_new AS 
    (
     SELECT PersIDOLD, PersIDNEW, RightsMUT, 
     SUM(gap) over(ORDER BY PersIDOLD, PersIDNEW) grp 

     FROM 
     (
      SELECT h1.*, 
      CASE 
       WHEN h1.PersIDNEW = lag(h1.PersIDNEW) 
            over(ORDER BY h1.PersIDOLD, h1.PersIDNEW) 
       OR h1.PersIDOLD = lag(h1.PersIDOLD) 
            over(ORDER BY h1.PersIDOLD, h1.PersIDNEW) 
       THEN 0 
       ELSE 1 
      END gap 
      FROM HelpTable1 h1 

     ) 
    ) 
    SELECT PERSIDNEW, RIGHTSMUT 
    FROM t_new 
    WHERE grp = 
    (
     SELECT grp FROM t_new WHERE PersIDNEW = 12 -- going to be a variable 
    ) 

回报是这样的:

http://img59.imageshack.us/img59/6733/tablei.gif

现在我想回到row 3 coze它在排1 RightsMUT

我该怎么做? 我试图用2 With来做,但是oracle还不支持2。

回答

0

我的解决办法:

WITH t_new AS 
    (
     -- Alles durch gehen und 
     SELECT PersIDOLD, PersIDNEW, RightsMUT, SUM(gap) over(ORDER BY PersIDOLD, PersIDNEW) grp 
     FROM 
     (
      SELECT h1.*, 
      CASE 
       WHEN h1.PersIDNEW = lag(h1.PersIDNEW) over(ORDER BY h1.PersIDOLD, h1.PersIDNEW) 
       OR h1.PersIDOLD = lag(h1.PersIDOLD) over(ORDER BY h1.PersIDOLD, h1.PersIDNEW) 
       THEN 0 
       ELSE 1 
      END gap 
      FROM LUTAXKT.HILFSTABELLE1UMSETZUNG h1 
      --WHERE h1.updateflag = 0 
     ) 
    ) 
    SELECT PersIDNEW, RightsMUT 
    FROM t_new 
    WHERE RightsMUT = 1 and 
    grp = 
    (
     SELECT grp FROM t_new WHERE PersIDNEW = 12 
    ) 
0

让我尝试猜测 - 请检查下面给出你所需要的:

WITH t_new AS 
(
    SELECT PersIDOLD, PersIDNEW, RightsMUT, 
    SUM(gap) over(ORDER BY PersIDOLD, PersIDNEW) grp 

    FROM 
    (
     SELECT h1.*, 
     CASE 
      WHEN h1.PersIDNEW = lag(h1.PersIDNEW) 
           over(ORDER BY h1.PersIDOLD, h1.PersIDNEW) 
      OR h1.PersIDOLD = lag(h1.PersIDOLD) 
           over(ORDER BY h1.PersIDOLD, h1.PersIDNEW) 
      THEN 0 
      ELSE 1 
     END gap 
     FROM HelpTable1 h1 

    ) 
) 
SELECT PERSIDNEW, RIGHTSMUT 
FROM t_new 
WHERE PersIDNEW = 12 AND RightsMUT = 1 
+0

这并不返回任何结果,但我找到了一种方法怎么办呢... 这很简单:/ – domiSchenk 2010-05-21 11:02:23

+0

好吧,如果你解决了问题,或者更新问题以显示答案(你可能会收到一些评论),或者将它作为你自己问题的答案发布。 – Unreason 2010-05-21 12:41:40