إعادة صف من شرط مع
-
04-10-2019 - |
سؤال
أحاول جعل وظيفة تعيد قيمة.
في وظيفتي لدي هذا البرنامج النصي:
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
في ROW ROLUCTMUT
كيف أستطيع فعل هذا؟ حاولت أن أفعل ذلك مع 2 With
لكن أوراكل لا يدعم 2 حتى الآن.
المحلول 2
بلدي الحل:
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
)
نصائح أخرى
اسمحوا لي أن أحاول التخمين - من فضلك تحقق مما إذا كان ما يلي يمنحك ما تحتاجه:
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
لا تنتمي إلى StackOverflow