Jump to content

Oracle To SQL Server Help


Recommended Posts

Posted

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

Posted
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

 

Posted
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

_-_

Posted

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

 

Posted
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..

Posted
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.. 

Posted
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 silent_I1

Posted
28 minutes ago, Amrita said:

nenu annadi helping ki good job. nenu asalu query chudaledu silent_I1

nuvvu sql lo thope thurum ani utah lo talk

Posted
9 minutes ago, karthikn said:

nuvvu sql lo thope thurum ani utah lo talk

A rumor start chesindi nuvve ani FBI info @3$%

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...