CREATE TABLE Item(ID int,Name varchar(10),Wast decimal(2,2))
INSERT Item SELECT 1,N'A产品',0.01
UNION  ALL  SELECT 2,N'B产品',0.02
UNION  ALL  SELECT 3,N'C产品',0.10
UNION  ALL  SELECT 4,N'D配件',0.15
UNION  ALL  SELECT 5,N'E物料',0.03
UNION  ALL  SELECT 6,N'F物料',0.01
UNION  ALL  SELECT 7,N'G配件',0.02

CREATE TABLE Bom(ItemID int,ChildId int)
INSERT Bom SELECT 1,4
UNION  ALL SELECT 1,7   --A产品由D配件和G配件组成
UNION  ALL SELECT 2,1
UNION  ALL SELECT 2,6
UNION  ALL SELECT 2,7   --B产品由F物料及G配件组成
UNION  ALL SELECT 4,5
UNION  ALL SELECT 4,6    --D配件由F物料组成
UNION  ALL SELECT 3,2
UNION  ALL SELECT 3,1    --C产品由A产品和B产品组成
GO

CREATE FUNCTION f_Bom(
@ItemIDs varchar(1000), --要查询物料清单及生产量的产品编号列表(逗号分隔)
@Num   int          --要生产的数量
)RETURNS @t TABLE(ItemID int,ChildId int,Nums int,Level int)
AS
BEGIN
    DECLARE @Level int
    SET @Level=1
    INSERT @t SELECT a.ItemID,a.ChildId,ROUND(@Num/(1-b.Wast),0),@Level
    FROM Bom a,Item b
    WHERE a.ChildId=b.ID
        AND CHARINDEX(','+RTRIM(a.ItemID)+',',','+@ItemIDs+',')>0
    WHILE @@ROWCOUNT>0 and @Level<140
    BEGIN
        SET @Level=@Level+1
        INSERT @t SELECT a.ItemID,b.ChildId,ROUND(a.Nums/(1-c.Wast),0),@Level
        FROM @t a,Bom b,Item c
        WHERE a.ChildId=b.ItemID
            AND b.ChildId=c.ID
            AND a.Level=@Level-1
    END
    RETURN
END
GO

--调用函数展开产品1、2、3的结构及计算生产10个产品时,各需要多少个配件
SELECT a.ItemID,ItemName=b.Name,
    a.ChildId,ChildName=c.Name,
    a.Nums,a.Level
FROM f_Bom('1,2,3',10) a,Item b,Item c
WHERE a.ItemID=b.ID
    AND a.ChildId=c.ID
ORDER BY a.ItemID,a.Level,a.ChildId

产品配件清单查询示例.sql相关推荐

  1. sql子查询示例_SQL更新查询示例说明

    sql子查询示例 In this article, we're going to learn how to use the SQL update statement - what it is, wha ...

  2. Hibernate Native SQL查询示例

    Hibernate Native SQL查询示例 欢迎使用Hibernate Native SQL Query示例教程.我们在前面的文章中研究了Hibernate查询语言和Hibernate Crit ...

  3. sql子查询示例_学习SQL:SQL查询示例

    sql子查询示例 In the previous article we've practiced SQL, and today, we'll continue with a few more SQL ...

  4. Hibernate本机SQL查询示例

    Welcome to the Hibernate Native SQL Query example tutorial. We looked into Hibernate Query Language ...

  5. oracle 转成sql server,怎样把Oracle查询转换为SQL Server

    怎样把Oracle查询转换为SQL Server 来源:中国IT实验室    编辑:Anne  时间:2008年08月22日 在把Oracle查询转换为SQL Server的时候要特别当心一些不容易注 ...

  6. linux查询数据库sql,SQL Server 跨数据库查询

    基本语句 SELECT * FROM 数据库A.dbo.表A a, 数据库B.dbo.表B b WHERE a.field=b.field "DBO"可以省略 如 SELECT * ...

  7. php mysql 字段不为空_Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null?...

    Thinkphp中查询复杂sql查询表达式,如何表达MYSQL中的某字段不为空is not null? 先上两种实现方式的实例: $querys["house_type_image" ...

  8. MongoDB 教程三: 高级查询 (SQL到MongoDB映射表)

    查询接口 对于查询操作,MongoDB 提供了 db.collection.find() 方法.这个方法接收查询条件和映射两个条件并且返回一个指向匹配文档的 游标 .你可以使用 limits, ski ...

  9. Hibernate命名查询示例 - @NamedQuery

    Hibernate命名查询示例 - @NamedQuery 欢迎使用Hibernate命名查询示例教程.我们看到了如何在Hibernate中使用HQL和Native SQL Query.如果有很多查询 ...

最新文章

  1. JDK源码解析 Comparator 中的策略模式
  2. [nodejs]国内npm安装nodejs modules失败的几个解决方案
  3. java web中出现莫名错误,出现错误标识和红线但不影响运行。
  4. 智行火车票能否把用户的敏感信息屏蔽?
  5. 安装PetShop后调试的诸多问题
  6. 微信和QQ,终于可以互通了!
  7. 27学java能找到工作吗_今年27,想自学Java,转行程序员,请问可行吗?
  8. 和的区别?以及 0x0f 的含义
  9. VS2013之error C3130 内部编译器错误的解决
  10. Win32反汇编(三)深层次的了解各种转移指令:IF语句有符号与无符号跳转
  11. (论文)Persuading Customers to Buy Early: The Value of Personalized
  12. 大数据高级开发工程师——Spark学习笔记(9)
  13. java 系统资源不足_[InteliJ IDEA] 系统资源不足
  14. 7-14 电话聊天狂人 (25分)
  15. 龙芯7A2000 CAN调试
  16. k8s之存储抽象nfs挂载
  17. Java中将base64编码字符串转换为图片
  18. 重新认识java(零) --- 不积跬步无以至千里
  19. 使用计算机处理信息 一般要经历,高一信息技术课程总复习
  20. Swift Web 开发之 Vapor - 模版 Leaf(三)

热门文章

  1. 浙大PAT考试1077~1080(2014上机复试题目)
  2. crash linux主要命令,crash分析
  3. 985大学落户浙江,北京航空航天大学杭州研究生院开工
  4. 会Vue还有必要学React吗?
  5. 占位图和图片懒加载项目实战详解
  6. 黑鹰的学习网站--感兴趣的可以去看看
  7. BackTrack 5 notes
  8. 开源 | 智能家居场景,基于 AriKiss 配网的微信小程序
  9. Android 开发初步环境搭建
  10. 乔布斯在斯坦福大学的演讲稿【中英】