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

지금 나는 그것이 행에 1

을 RightsMUT이 row 3 coze을 반환하려면 내 기능에서

나는이 스크립트가

어떻게하면됩니까? 으로 시도했지만 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

내가 추측 해보자 - 다음 당신을 제공하는 경우 당신이 필요 pls는 확인 :

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

+0

괜찮 았으면, 답을 표시하기 위해 질문을 업데이트하거나 (의견이있을 수도 있습니다) 자신의 질문에 답을 게시하십시오. – Unreason