Foxtable(狐表)用户栏目专家坐堂 → CTE中如何避免重复值


  共有3383人关注过本帖平板打印复制链接

主题:CTE中如何避免重复值

帅哥哟,离线,有人找我吗?
happyft
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1909 积分:16993 威望:0 精华:0 注册:2014/7/29 19:09:00
CTE中如何避免重复值  发帖心情 Post By:2018/4/3 19:41:00 [只看该作者]

 WITH CTE
    AS (SE LECT a.产品编码,
            CAST(NULL AS NVARCHAR(20)) AS 父件编码,
            CAST(1 AS FLOAT) AS 用量,
            CAST(0 AS FLOAT) AS 损耗,
            0 AS Levle,
            CAST(产品编码 AS VARCHAR(MAX)) AS path
        FROM (SE LECT DISTINCT 产品编码 FROM MPS01) a
        UNION ALL
        SE LECT BOM.产品编码,
            BOM.父件编码,
            BOM.用量,
            BOM.损耗,
            c.Levle + 1 AS Levle,
            CAST(c.path + '\' + BOM.产品编码 AS VARCHAR(MAX)) AS path
        FROM CTE AS c
            INNER JOIN BOM
                ON c.产品编码 = BOM.父件编码
        WHERE NOT EXISTS (SE LECT * FROM CTE WHERE  CTE.产品编码 = bom.产品编码 and CTE.父件编码 = bom.父件编码)
       )

上述where条件的作用就是每次循环时产品编码及父件编码相同的值就不要加入进去,因为CTE不能第二次引用 ,要如何写才能实现这个功能?

谢谢!

 回到顶部