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. Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧
  2. eclipse 环境下 FreeMarker 编辑器插件
  3. python详细安装教程 path-Python解释器安装教程以及环境变量配置
  4. 张宇概率论与数理统计pdf_【书籍篇】张宇概率论与数理统计9讲
  5. 合理提升WEB前端性能
  6. python 多线程讲解(如何实现多线程,递归锁,互斥锁,信号量,事件等)
  7. Jass 技能模型定义(转)
  8. *【CF#633B】 A Trivial Problem(二分或枚举)
  9. 理论基础 —— 索引 —— 稠密索引
  10. 全军出击机器人进房间_科沃斯扫地机器人T8 POWER/MAX开箱测评推荐
  11. STL常用函数总结-queue+priority_queue
  12. Julia :PyPlot的plot_date
  13. 前端项目(1)--《学成在线》简单首页
  14. ENVI学习总结(十)——遥感图像监督分类
  15. 谷歌大牛Jeff Dean撰文:深度学习研究的黄金十年
  16. 时间序列复杂性的度量—近似熵和样本熵
  17. mysql修改校对集_mysql数据库的基本操作(增删改查、字符集、校对集)
  18. Linux中shell编程——编写shell脚本,实现功能:在用户输入年、月后自动打印出对应年月的日
  19. 19、Jetson Xavier NX使用yolov5对比GPU模型下的pt、onnx、engine 、 DeepStream 加速性能
  20. 宏基aspire拆机触摸_Acer宏碁(Acer宏碁)Acer S5-371-76GS超极本拆解图评测-ZOL中关村在线...

热门文章

  1. cartographer代码及论文分析
  2. 斐波那契兔子问题(递归实现)
  3. 详谈京东的商品搜索系统架构设计
  4. 天九共享:突破“邓巴数字”桎梏 创造资源能力圈
  5. jenkins部署 java项目到远程 windows服务器
  6. xilinx FPGA普通IO作PLL时钟输入
  7. ACM:nbsp;polya定理+hashnbsp;数论题nbsp;pojnbsp;3…
  8. mac备份_备份Mac的最佳方法
  9. csdn博客名字修改
  10. FPGA SEU问题与SEM Core