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


  共有3400人关注过本帖树形打印复制链接

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

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


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望: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不能第二次引用 ,要如何写才能实现这个功能?

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2018/4/4 16:50:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:a01.rar


两个表MPS01及BOM的带数据脚本如附件,
目的就是想用MPS01中的唯一产品编码按BOM表递归展开,要求CTE查询结果中的产品编码与父件编码的组合值唯一,即把重复值过虑掉

图片点击可在新窗口打开查看此主题相关图片如下:a01.jpg
图片点击可在新窗口打开查看

谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
HappyFt
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1916 积分:17092 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2018/4/4 20:46:00 [显示全部帖子]

这种方法是先生成再筛选出来,,如果直接在CTE中的递归中加入条能否实现?还是CTE中根本不能那样用?
谢谢!

 回到顶部