Office中国论坛/Access中国论坛

标题: 请教todaynew 关于【SQL SERVER小品】跟踪追击 [打印本页]

作者: 13601812106_01    时间: 2015-7-20 15:18
标题: 请教todaynew 关于【SQL SERVER小品】跟踪追击
本帖最后由 13601812106_01 于 2015-7-20 15:20 编辑

学习了两天,发现SQL递归很灵活:想请教一下老师:可否再加一个层次,查出来的结果按顺序的排列,如:
层次level
-1
10
101
 
--1
101
1001
 
---1
1001
10001
 
-2
10
102
 
--1
102
1002
 
--2
102
10056
 

以下为老师提供的代码,就是不知道怎么修改才好
WITH 单据递归查询 (bomID,产品id,子件ID,单耗,损耗率,根产品,level) AS  
(     
         SELECT bomID,产品id,子件ID,单耗,损耗率,产品id as 根产品,0 as level
         FROM bom表
         where 产品ID not in (SELECT distinct 子件id FROM bom表)
         
         UNION ALL
         SELECT a.bomID,a.产品id,a.子件ID,a.单耗,a.损耗率,b.根产品,b.level+1 as level
         FROM bom表 AS a,单据递归查询 AS b
         WHERE a.产品ID=b.子件ID)

SELECT * FROM 单据递归查询


麻烦老师了

【SQL SERVER小品】跟踪追击 -- SQL SERVER递归查询示例
http://www.office-cn.net/forum.p ... 9830&fromuid=145480
(出处: Office中国论坛/Access中国论坛)

作者: todaynew    时间: 2015-7-20 17:25
本帖最后由 todaynew 于 2015-7-20 17:28 编辑

是不是这么个意思:
WITH 单据递归查询 (bomID,产品id,子件ID,单耗,损耗率,根产品,level,层次) AS  
(     
         SELECT bomID,产品id,子件ID,单耗,损耗率,产品id as 根产品,0 as level,bomID as 层次
         FROM bom表
         where 产品ID not in (SELECT distinct 子件id FROM bom表)
         
         UNION ALL
         SELECT a.bomID,a.产品id,a.子件ID,a.单耗,a.损耗率,b.根产品,b.level+1 as level,b.层次
         FROM bom表 AS a,单据递归查询 AS b
         WHERE a.产品ID=b.子件ID)

SELECT * FROM 单据递归查询 ORDER BY 层次

作者: 13601812106_01    时间: 2015-7-20 22:25
谢谢老师指点,正是所需。想再请教一下,可否再加一个字段【显示】,当level为1时,【显示】为-1  当level为2时,【显示】为--2,........  

作者: todaynew    时间: 2015-7-21 10:03
本帖最后由 todaynew 于 2015-7-21 11:53 编辑
13601812106_01 发表于 2015-7-20 22:25
谢谢老师指点,正是所需。想再请教一下,可否再加一个字段【显示】,当level为1时,【显示】为-1  当level ...

多此一举,看不出有什么必要。呵呵
确实需要,在客户端解决即可。

作者: 13601812106_01    时间: 2015-7-21 12:41
老师的事例,下了一上午,好好学习

作者: 13601812106_01    时间: 2015-7-21 13:11
todaynew 发表于 2015-7-20 17:25
是不是这么个意思:
WITH 单据递归查询 (bomID,产品id,子件ID,单耗,损耗率,根产品,level,层次) AS  
(    ...

仔细测试,不是我想要的功能,我想达到功能,请老师帮忙?

作者: todaynew    时间: 2015-7-21 14:26
本帖最后由 todaynew 于 2015-7-21 16:19 编辑
13601812106_01 发表于 2015-7-21 13:11
仔细测试,不是我想要的功能,我想达到功能,请老师帮忙?

看不出有什么实际意义。

WITH 单据递归查询 (bomID,产品id,子件ID,单耗,损耗率,根产品,level,层次) AS  
(     
         SELECT bomID,产品id,子件ID,单耗,损耗率,产品id as 根产品,0 as level,子件ID as 层次
         FROM bom表
         where 产品ID not in (SELECT distinct 子件id FROM bom表)

         UNION ALL
         SELECT a.bomID,a.产品id,a.子件ID,a.单耗,a.损耗率,b.根产品,b.level+1 as level,b.层次 + '.' + a.子件ID as 层次
         FROM bom表 AS a,单据递归查询 AS b
         WHERE a.产品ID=b.子件ID)

SELECT * FROM 单据递归查询 ORDER BY 根产品,层次




作者: todaynew    时间: 2015-7-22 11:14
13601812106_01 发表于 2015-7-21 13:11
仔细测试,不是我想要的功能,我想达到功能,请老师帮忙?

http://www.office-cn.net/thread-120232-1-1.html




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3