qidao2017 2016-08-26 10:26 采纳率: 0%
浏览 970

sqlserver求大神教写树型查询

把这条oracle的sql改成sqlserver的树型查询,帅哥们看过来

 SELECT
    DISTINCT nodeid,
    nodename,
    supernodeid,
    nodelevel,
    isleaf,
    disporder 
FROM
    (   SELECT
            t1.ORGNO               AS nodeid,
            t1.ORGNAME             AS nodename,
            t1.SUPERORGNO          AS supernodeid,
            t1.orglevel             AS nodelevel,
            CAST('0' AS VARCHAR(1)) AS isleaf,
            t1.disporder           AS disporder 
        FROM
            BPEUSER.pcs_org t1 
            INNER JOIN BPEUSER.sys_user t2 
            ON t1.ORGNO=t2.ORGNO 
            LEFT JOIN BPEUSER.sys_user_dep t3 
            ON t2.usercode = t3.usercode 
        WHERE
            t3.isowner=1 AND
            // 用户只能看见本机构和自己够信息
            (t1.ORGNO='
                     d833d6f19e93f0e60b959629741b60cd' OR
            t1.SUPERORGNO='d833d6f19e93f0e60b959629741b60cd') 
        UNION
SELECT
    t2.DEPNO               AS nodeid,
    t2.DEPNAME             AS nodename,
    CASE 
        WHEN t2.SUPERDEPNO='0' 
        THEN t2.orgno 
        ELSE 
        CASE 
            WHEN t2.SUPERDEPNO<>'0' 
            THEN t2.SUPERDEPNO 
        END 
    END                        AS supernodeid,
    t2.deplevel            AS nodelevel,
    CAST('0' AS VARCHAR(1)) AS isleaf,
    t2.disporder           AS disporder 
FROM
    BPEUSER.sys_user t4 
    INNER JOIN BPEUSER.sys_user_dep t3 
    ON t3.usercode = t4.usercode 
    INNER JOIN BPEUSER.SYS_DEP t2 
    ON t2.DEPNO =t3.DEPNO 
    INNER JOIN BPEUSER.pcs_org t1 
    ON t2.orgno=t1.orgno 
WHERE
    t3.isowner=1 
UNION
SELECT
    t3.userCode            AS nodeid,
    t3.username             AS nodename,
    t4.depno supernodeid,
    CAST(9 AS NUMBER(3))    AS nodelevel,
    CAST('1' AS VARCHAR(1)) AS isleaf,
    t3.disporder 
FROM
    BPEUSER.sys_user t3 
    INNER JOIN BPEUSER.sys_user_dep t4 
    ON t3.usercode = t4.usercode
    )
    START WITH nodeid IN (  SELECT
                                DISTINCT t3.userCode AS nodeid 
                            FROM
                                BPEUSER.sys_user t3 
                                INNER JOIN BPEUSER.sys_user_dep t4 
                                ON t3.usercode = t4.usercode
                                // 用户只能看见本机构人员和自己够的管理员
                            WHERE
                                t3.status='1' AND
                                t3.userCode<>'system_tjs' AND
                                t3.userCode NOT IN (SELECT
                                                        t3.userCode 
                                                    FROM
                                                        BPEUSER.sys_user t3,
                                                        BPEUSER.pcs_org t1 
                                                    WHERE
                                                        t1.orgNo=t3.orgNo AND
                                                        ((t3.orgNo=
                                                        'd833d6f19e93f0e60b959629741b60cd' 
                                                        AND
                                                        t3.isorgadmin='1') OR
                                                        (t1.superOrgNo =
                                                        'd833d6f19e93f0e60b959629741b60cd' 
                                                        AND
                                                        t3.isorgadmin<>'1'))
                                )
                                AND
                                (t3.ORGNO ='d833d6f19e93f0e60b959629741b60cd' OR
                                t3.ORGNO IN (   SELECT
                                                    t1.orgNo 
                                                FROM
                                                    BPEUSER.pcs_org t1 
                                                WHERE
                                                    t1.SUPERORGNO =
                                                    'd833d6f19e93f0e60b959629741b60cd'
                                )
                                ) 
    )
    CONNECT BY PRIOR supernodeid = nodeid 
ORDER SIBLINGS BY
    disporder
  • 写回答

2条回答 默认 最新

  • 57367896_qq 2016-08-27 12:38
    关注

    只不过oracle不支持主键了,用伪劣就行

    评论

报告相同问题?

悬赏问题

  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn