首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ORACLE连接到Server

如何将ORACLE连接到Server
EN

Stack Overflow用户
提问于 2014-05-21 06:38:18
回答 1查看 127关注 0票数 0

在Server中使用递归CTE时,不应使用GROUP BYLEFT OUTER JOINORDER BY等。

如何将此ORACLE查询转换为Server?

代码语言:javascript
复制
SELECT *
  FROM (SELECT COALESCE(a.tree_id, ' ') MNUID,
                COALESCE(a.tree_nm, ' ') MNUNM,
                COALESCE(A.TREE_LEV_CD, ' ') MNULEVCD,
                COALESCE(A.UP_TREE_ID, ' ') UPMNUID,
                COALESCE(A.TREE_CD, ' ') TREECD,
                COALESCE(A.TREE_LRK_RUF_ID, ' ') SCEXRSSEQVL,
                CASE WHEN B.SCH_CNT=NULL THEN 0 ELSE B.SCH_CNT END AS SCHCNT
        FROM SC_TREE_MASTER A
        LEFT OUTER JOIN
            (SELECT C.TREE_LRK_RUF_ID, COUNT(SCH_ID) SCH_CNT
                FROM SC_TREE_MASTER C
                LEFT OUTER JOIN AL_SCHEDULE_MAPPING D
                ON C.TREE_LRK_RUF_ID = D.PRA_WF_ID
                WHERE C.TREE_BJ_CD = '01'
                AND C.TREE_CD = '04'
                GROUP BY TREE_LRK_RUF_ID) B
        ON (A.TREE_BJ_CD = '01' AND A.TREE_LRK_RUF_ID = B.TREE_LRK_RUF_ID)
        ORDER BY MNULEVCD, SCEXRSSEQVL)
 START WITH UPMNUID = 'TR00000000'
CONNECT BY PRIOR MNUID = UPMNUID
 ORDER SIBLINGS BY MNUID;

我已经试过了。

但是出现了错误。

代码语言:javascript
复制
WITH TEMP_TAB(MNUID, MNUNM, MNULEVCD, UPMNUID, TREECD, TREE_LRK_RUF_ID, SORT, RECURSIVE_LEVEL) AS            
 (SELECT TREE_ID,
         TREE_NM,
         TREE_LEV_CD,
         UP_TREE_ID,
         TREE_CD,
         TREE_LRK_RUF_ID,
         CONCAT('-',TREE_ID) AS SORT,
         1 AS RECURSIVE_LEVEL
    FROM SC_TREE_MASTER 
   WHERE TREE_BJ_CD = '01'
     AND UP_TREE_ID = 'TR00000000'
  UNION ALL
  SELECT A.TREE_ID,
         A.TREE_NM,
         A.TREE_LEV_CD,
         A.UP_TREE_ID,
         A.TREE_CD,
         A.TREE_LRK_RUF_ID,
         CONCAT(B.SORT,'/',A.TREE_ID) AS SORT,
         (RECURSIVE_LEVEL + 1) AS RECURSIVE_LEVEL
    FROM SC_TREE_MASTER A, TEMP_TAB B
   WHERE A.TREE_BJ_CD = '01'
     AND B.MNUID =A.UP_TREE_ID 
 )
SELECT COALESCE(M.TREE_ID, ' ') MNUID,
       COALESCE(M.TREE_NM, ' ') MNUNM,
       COALESCE(M.TREE_LEV_CD, ' ') MNULEVCD,
       COALESCE(M.UP_TREE_ID, ' ') UPMNUID,
       COALESCE(M.TREE_CD, ' ') TREECD,
       COALESCE(M.TREE_LRK_RUF_ID, ' ') TREE_LRK_RUF_ID
FROM TEMP_TAB M                
LEFT OUTER JOIN (SELECT C.TREE_LRK_RUF_ID, COUNT(SCH_ID) SCH_CNT
                  FROM SC_TREE_MASTER C
                  LEFT OUTER JOIN AL_SCHEDULE_MAPPING D
                    ON C.TREE_LRK_RUF_ID = D.PRA_WF_ID
                 WHERE C.TREE_BJ_CD = '01'
                   AND C.TREE_CD = '04'
                 GROUP BY TREE_LRK_RUF_ID) N
ON M.TREE_LRK_RUF_ID = N.TREE_LRK_RUF_ID 
ORDER BY SORT;

在递归查询"TEMP_TAB“的列”排序“中,锚点和递归部分之间的类型不匹配。

另一个问题:如何将ORACLE中的connect by转换为所有数据库系统的ANSI?

难道不可能吗??

我添加了这个查询,可以在下面的POSTGRESQL中使用。

我认为这个查询类似于Server递归-CTE查询,但在Server中,它不起作用。

代码语言:javascript
复制
WITH RECURSIVE TEMP_TAB(TREE_ID,
         TREE_NM,
         TREE_LEV_CD,
         UP_TREE_ID,
         TREE_CD,
         TREE_LRK_RUF_ID,
         SORT ,                         
         RECURSIVE_LEVEL) AS            
 (SELECT TREE_ID,
         TREE_NM,
         TREE_LEV_CD,
         UP_TREE_ID,
         TREE_CD,
         TREE_LRK_RUF_ID,
         CONCAT('-',TREE_ID) ,
         1 RECURSIVE_LEVEL
    FROM SC_TREE_MASTER 
   WHERE TREE_BJ_CD = '01'
     AND UP_TREE_ID = 'TR00000000'
  UNION ALL
  SELECT A.TREE_ID,
         A.TREE_NM,
         A.TREE_LEV_CD,
         A.UP_TREE_ID,
         A.TREE_CD,
         A.TREE_LRK_RUF_ID,
         CONCAT(B.SORT,'/',A.TREE_ID),
         RECURSIVE_LEVEL + 1
    FROM SC_TREE_MASTER A, TEMP_TAB B
   WHERE A.TREE_BJ_CD = '01'
     AND B.TREE_ID =A.UP_TREE_ID 
 )
SELECT COALESCE(M.TREE_ID, ' ') MNUID,
       COALESCE(M.TREE_NM, ' ') MNUNM,
       COALESCE(M.TREE_LEV_CD, ' ') MNULEVCD,
       COALESCE(M.UP_TREE_ID, ' ') UPMNUID,
       COALESCE(M.TREE_CD, ' ') TREECD,
       COALESCE(M.TREE_LRK_RUF_ID, ' ') SCEXRSSEQVL,
       COALESCE(N.SCH_CNT, 0)
FROM TEMP_TAB M                
LEFT OUTER JOIN (SELECT C.TREE_LRK_RUF_ID, COUNT(SCH_ID) SCH_CNT
                  FROM SC_TREE_MASTER C
                  LEFT OUTER JOIN AL_SCHEDULE_MAPPING D
                    ON C.TREE_LRK_RUF_ID = D.PRA_WF_ID
                 WHERE C.TREE_BJ_CD = '01'
                   AND C.TREE_CD = '04'
                 GROUP BY TREE_LRK_RUF_ID) N
ON M.TREE_LRK_RUF_ID = N.TREE_LRK_RUF_ID 
ORDER BY SORT;
EN

回答 1

Stack Overflow用户

发布于 2014-05-22 07:45:54

代码语言:javascript
复制
WITH TEMP_TAB(TREE_ID,
         TREE_NM,
         TREE_LEV_CD,
         UP_TREE_ID,
         TREE_CD,
         TREE_LRK_RUF_ID,
         SORT,                         
         RECURSIVE_LEVEL) AS            
 (SELECT TREE_ID,
         TREE_NM,
         TREE_LEV_CD,
         UP_TREE_ID,
         TREE_CD,
         TREE_LRK_RUF_ID,
         CAST(CONCAT('-',TREE_ID) AS VARCHAR(100)),
         1 RECURSIVE_LEVEL
    FROM SC_TREE_MASTER 
   WHERE TREE_BJ_CD = '01'
     AND UP_TREE_ID = 'TR00000000'
  UNION ALL
  SELECT A.TREE_ID,
         A.TREE_NM,
         A.TREE_LEV_CD,
         A.UP_TREE_ID,
         A.TREE_CD,
         A.TREE_LRK_RUF_ID,
         CAST(CONCAT(B.SORT,'/',A.TREE_ID) AS VARCHAR(100)),
         RECURSIVE_LEVEL + 1
    FROM SC_TREE_MASTER A, TEMP_TAB B
   WHERE A.TREE_BJ_CD = '01'
     AND B.TREE_ID =A.UP_TREE_ID 
 )
SELECT COALESCE(M.TREE_ID, ' ') MNUID,
       COALESCE(M.TREE_NM, ' ') MNUNM,
       COALESCE(M.TREE_LEV_CD, ' ') MNULEVCD,
       COALESCE(M.UP_TREE_ID, ' ') UPMNUID,
       COALESCE(M.TREE_CD, ' ') TREECD,
       COALESCE(M.TREE_LRK_RUF_ID, ' ') SCEXRSSEQVL,
       COALESCE(N.SCH_CNT, 0)
FROM TEMP_TAB M                
LEFT OUTER JOIN (SELECT C.TREE_LRK_RUF_ID, COUNT(SCH_ID) SCH_CNT
                  FROM SC_TREE_MASTER C
                  LEFT OUTER JOIN AL_SCHEDULE_MAPPING D
                    ON C.TREE_LRK_RUF_ID = D.PRA_WF_ID
                 WHERE C.TREE_BJ_CD = '01'
                   AND C.TREE_CD = '04'
                 GROUP BY TREE_LRK_RUF_ID) N
ON M.TREE_LRK_RUF_ID = N.TREE_LRK_RUF_ID 
ORDER BY SORT;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23775719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档