2010-05-21 56 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