ranjith23 Posted December 12, 2018 Report Posted December 12, 2018 Can you help me converting below SQL from Oracle to SQL Server? (START WITH & CONNECT BY are oracle functions) SELECT DISTINCT N.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, FROM PSTREENODE N , PSTREENODE B1 WHERE N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT START WITH N.TREE_NODE_NUM = ( SELECT N1.TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE) CONNECT BY PRIOR N.PARENT_NODE_NUM = N.TREE_NODE_NUM ORDER BY N.TREE_NODE_NUM Quote
karthikn Posted December 12, 2018 Report Posted December 12, 2018 45 minutes ago, ranjith23 said: Can you help me converting below SQL from Oracle to SQL Server? (START WITH & CONNECT BY are oracle functions) SELECT DISTINCT N.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, FROM PSTREENODE N , PSTREENODE B1 WHERE N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT START WITH N.TREE_NODE_NUM = ( SELECT N1.TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE) CONNECT BY PRIOR N.PARENT_NODE_NUM = N.TREE_NODE_NUM ORDER BY N.TREE_NODE_NUM try this..rough guess WITH CTE AS ( SELECT N1.TREE_NODE_NUM AS TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE) SELECT DISTINCT CTE.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, FROM PSTREENODE N INNER JOIN PSTREENODE B1 ON N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT INNER JOIN CTE ON N.PARENT_NODE_NUM = CTE.TREE_NODE_NUM ORDER BY CTE.TREE_NODE_NUM Quote
Amrita Posted December 12, 2018 Report Posted December 12, 2018 1 minute ago, karthikn said: try this..rough guess WITH CTE AS ( SELECT N1.TREE_NODE_NUM AS TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE) SELECT DISTINCT CTE.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, FROM PSTREENODE N , PSTREENODE B1 WHERE N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT INNER JOIN N.PARENT_NODE_NUM = CTE.TREE_NODE_NUM ORDER BY CTE.TREE_NODE_NUM Quote
papacha Posted December 12, 2018 Report Posted December 12, 2018 Can you also try this? ;WITH RecursiveCTE AS ( -- Anchor (START WITH) SELECT DISTINCT N.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, Level = 0 FROM PSTREENODE N JOIN PSTREENODE B1 ON N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT WHERE N.TREE_NODE_NUM = ( SELECT N1.TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE ) UNION ALL -- Recursive join SELECT DISTINCT N.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE Level = R.Level + 1 FROM PSTREENODE N JOIN PSTREENODE B1 ON N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT JOIN RecursiveCTE R ON R.TREE_NODE_NUM = C.PARENT_NODE_NUM ) SELECT R.* FROM RecursiveCTE AS R Quote
karthikn Posted December 12, 2018 Report Posted December 12, 2018 1 minute ago, Amrita said: 3 minutes ago, karthikn said: try this..rough guess WITH CTE AS ( SELECT N1.TREE_NODE_NUM AS TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE) SELECT DISTINCT CTE.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, FROM PSTREENODE N INNER JOIN PSTREENODE B1 ON N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT INNER JOIN CTE ON N.PARENT_NODE_NUM = CTE.TREE_NODE_NUM ORDER BY CTE.TREE_NODE_NUM mallosari chudagane wrogn ani clarity came.. you cannot join N1 and N in CTE.. Quote
karthikn Posted December 12, 2018 Report Posted December 12, 2018 5 minutes ago, papacha said: Can you also try this? ;WITH RecursiveCTE AS ( -- Anchor (START WITH) SELECT DISTINCT N.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE, Level = 0 FROM PSTREENODE N JOIN PSTREENODE B1 ON N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT WHERE N.TREE_NODE_NUM = ( SELECT N1.TREE_NODE_NUM FROM PSTREENODE N1 WHERE N1.SETID = N.SETID AND N1.SETCNTRLVALUE = N.SETCNTRLVALUE AND N1.TREE_NAME = B1.TREE_NAME AND N1.EFFDT = N.EFFDT AND N1.TREE_NODE = B1.TREE_NODE ) UNION ALL -- Recursive join SELECT DISTINCT N.TREE_NODE_NUM, N.TREE_LEVEL_NUM, N.TREE_NODE Level = R.Level + 1 FROM PSTREENODE N JOIN PSTREENODE B1 ON N.SETID = B1.SETID AND N.SETCNTRLVALUE = B1.SETCNTRLVALUE AND N.TREE_NAME = B1.TREE_NAME AND N.EFFDT = B1.EFFDT JOIN RecursiveCTE R ON R.TREE_NODE_NUM = C.PARENT_NODE_NUM ) SELECT R.* FROM RecursiveCTE AS R recursive CTE is the way to go.. Quote
Amrita Posted December 12, 2018 Report Posted December 12, 2018 4 minutes ago, karthikn said: mallosari chudagane wrogn ani clarity came.. you cannot join N1 and N in CTE.. nenu annadi helping ki good job. nenu asalu query chudaledu Quote
karthikn Posted December 12, 2018 Report Posted December 12, 2018 28 minutes ago, Amrita said: nenu annadi helping ki good job. nenu asalu query chudaledu nuvvu sql lo thope thurum ani utah lo talk Quote
Amrita Posted December 12, 2018 Report Posted December 12, 2018 9 minutes ago, karthikn said: nuvvu sql lo thope thurum ani utah lo talk A rumor start chesindi nuvve ani FBI info Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.