设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2073|回复: 7
打印 上一主题 下一主题

[其它] 请教todaynew 关于【SQL SERVER小品】跟踪追击

[复制链接]
跳转到指定楼层
1#
发表于 2015-7-20 15:18:14 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 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中国论坛)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅
8#
发表于 2015-7-22 11:14:53 | 只看该作者
13601812106_01 发表于 2015-7-21 13:11
仔细测试,不是我想要的功能,我想达到功能,请老师帮忙?

http://www.office-cn.net/thread-120232-1-1.html
7#
发表于 2015-7-21 14:26:53 | 只看该作者
本帖最后由 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 根产品,层次



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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
 楼主| 发表于 2015-7-21 12:41:34 | 只看该作者
老师的事例,下了一上午,好好学习
4#
发表于 2015-7-21 10:03:44 | 只看该作者
本帖最后由 todaynew 于 2015-7-21 11:53 编辑
13601812106_01 发表于 2015-7-20 22:25
谢谢老师指点,正是所需。想再请教一下,可否再加一个字段【显示】,当level为1时,【显示】为-1  当level ...

多此一举,看不出有什么必要。呵呵
确实需要,在客户端解决即可。
3#
 楼主| 发表于 2015-7-20 22:25:08 | 只看该作者
谢谢老师指点,正是所需。想再请教一下,可否再加一个字段【显示】,当level为1时,【显示】为-1  当level为2时,【显示】为--2,........  
2#
发表于 2015-7-20 17:25:17 | 只看该作者
本帖最后由 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 层次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-1 18:02 , Processed in 0.098426 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表