SQL里递归结果如何和其他表进行关联

问题描述

SQL里递归结果如何和其他表进行关联

我这里有一个退料,主要是退半成品,和一个领料,主要是领半成品下面的物料的一个SQL语句:SELECT tf1.REM,tf1.IJ_NO,tf1.PRD_NO,tf1.ID_NO,tf1.qty ,tf2.FL_NO,tf2.PRD_NO,tf2. qty

FROM TF_IJ tf1
LEFT JOIN TF_FL tf2 ON tf2.REM=tf1.REM AND tf2.ITM=tf1.ITM

WHERE tf1.REM!=''AND tf1.PRD_NO LIKE '1010%' AND tf1.REM='MO121001706'AND tf1.PRD_NO= '1010300125'
结果如下:
REM IJ_NO PRD_NO ID_NO qty FL_NO PRD_NO qty
MO121001706 WI130100106 1010300125 1010300125->A0 40 M7130600060 1030100163 300
然后我用递归查询出来了这个半成品下面的最终物料和单位用量(都递归过),语句如下:
WITH CTE(bom_no,prd_no,id_no,qty )
AS
(select bom_no,prd_no,id_no,qty from tf_bom WHERE BOM_NO='1010300125->A0'
UNION ALL

SELECT A.BOM_NO,A.PRD_NO,A.id_no,CAST((B.qty*A.QTY) as NUMERIC(28,8)) AS qty
FROM CTE B
INNER JOIN tf_bom A on A.bom_NO=B.id_no )
SELECT bom_no,prd_no,id_no,qty FROM CTE where not exists( select 1 from tf_bom where bom_NO=CTE.id_no)
递归的结果是:
bom_no prd_no id_no qty
POL111->A0 1020300223 1
POL111->A0 1020300132 1
1010100060-> 1020500024 1
然后我想要的结果是根据查出退料的半成品及退料数,根据递归结果,得出应该领的最终物料的物料号及数量,和实际领的物料号及数量进行比较,结果如下:
IJ_NO PRD_NO ID_NO qty 1010300125->A0的下层物料 1010300125->A0的最终物料 根据递归的标准用量乘以退料的半成品数 FL_NO PRD_NO qty
WI130100106 1010300125 1010300125->A0 40 POL111->A0 1020300223 1x40 M7130600060 1030100163 300
WI130100106 1010300125 1010300125->A0 40 POL111->A0 1020300132 1x40 M7130600060 1030100163 300
WI130100106 1010300125 1010300125->A0 40 1010100060-> 1020500024 1x40 M7130600060 1030100163 300

时间: 2024-09-04 08:28:25

SQL里递归结果如何和其他表进行关联的相关文章

xml文件-我有一组xml和bin,如何将里面的信息导入到成sql里的一张表

问题描述 我有一组xml和bin,如何将里面的信息导入到成sql里的一张表 用dataset?还是在sql里编程?如果有源码实例,或者相关参考链接请发给我,必有重谢!!553452423@qq.com 解决方案 xml可以解析,然后一个个插入数据库的各个列 bin要看你的格式什么怎么解析才能导入对应的数据库

select-新人请教SQL里这个查询语句的意思~

问题描述 新人请教SQL里这个查询语句的意思~ select * from PM_UserRole where UserID =1 select A.*,B.PermName from PM_RolePerm A inner join PM_Permission B On A.PermCode=B.PermCode where A.RoleID=4 解决方案 查询角色id=4,用户id=1的数据,用户表和角色表通过premcode关联 解决方案二: 同一楼上的,不过你似乎多写了一个on 解决方案

sql-如何把SQL里的true和flash值转换成是和否显示在网页中?

问题描述 如何把SQL里的true和flash值转换成是和否显示在网页中? 如图,应该写什么?在哪写?求大神指教! 解决方案 标题打错了.是true和false~ 解决方案二: 在页面写啊,判断那个值如果是true就 是 false就否 解决方案三: 直接判断啊 if(flag==true){ ... }else{ ... } 解决方案四: 同上 或者在后台处理 好了返回给前台也一样 解决方案五: 直接写个判断,true就该某个位置的text为是,反之为否 解决方案六: SQL语句中试试用ToC

sql-关于SQL里一对一及一对多关系的问题,请教大神。

问题描述 关于SQL里一对一及一对多关系的问题,请教大神. 比方一个老师只教一种学科(一对一),一个学生可以学多种学科(一对多). 那么,我想请问的是,如何在SQL表中实现呢?我弄了几次都是失败了.有三个表: 教师表(编号,姓名,学科),学生表(编号,姓名,学科),课程表(编号,学科),在分别定义课程表&教师表,课程表&学生表的关系后.发现还是只能分别对应一个科目.添加就报错.求指教. 解决方案 你这几张表看着有点乱. 我的理解是有张[教师基本信息表(教师编号,教师名称)],[学生基本信息

SQL实现递归及存储过程中In()参数传递解决方案详解_MsSql

1.SQL递归 在SQL Server中,我们可以利用表表达式来实现递归算法,一般用于阻止机构的加载及相关性处理. -->实现: 假设OrganiseUnit(组织机构表)中主要的三个字段为OrganiseUnitID(组织机构主键ID).ParentOrganiseUnitID(组织机构父ID).OrganiseName(组织机构名称) 复制代码 代码如下: with organise as(select * from OrganiseUnit where OrganiseUnit.Organ

sql server递归子节点、父节点sql查询表结构的实例

一.查询当前部门下的所有子部门 WITH dept AS ( SELECT * FROM dbo.deptTab --部门表 WHERE pid = @id UNION ALL SELECT d.* FROM dbo.deptTab d INNER JOIN dept ON d.pid = dept.id ) SELECT * FROM dept 二.查询当前部门所有上级部门 WITH tab AS ( SELECT DepId , ParentId , DepName , [Enable] ,

数据库-新手求教SQL server语句 求和,多个表之间的操作

问题描述 新手求教SQL server语句 求和,多个表之间的操作 SQL求和插入,求C表更新每个OrderID的SUM_Fee,SUM_Fee对应B表每个OrderId的总和(A表的B_ID对应B表的ID,B_ID记录单个Fee)? 解决方案 SQL Server 2005 用触发器跟踪表操作 解决方案二: update C set SUM_Fee=(select SUM(orderid) from B where B.orderid=C.orderid)没看懂A表,不是太明确的需求... 解

SQL Server2005中用语句创建数据库和表

在SQL Server2005中用语句创建数据库和表: 具体示例如下: use master go if exists (select * from sysdatabases where name='Study') --判断Study数据库是否存在,如果是就进行删除 drop database Study go EXEC sp_configure 'show advanced options', 1 GO -- 更新当前高级选项的配置信息 RECONFIGURE GO EXEC sp_confi

SQL 2008阻止保存要求重新创建表的更改的问题

SQL Server 2008"阻止保存要求重新创建表的更改"的错误的解决方案是本文我们主要要介绍的内容,情况是这样的:我们在用SQL Server 2008 建完表后,插入或修改任意列时,提示:当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表,然后重新创建新表,才能完成表的更改. 如果强行更改会出现以下提示:不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了"阻止保存要求重新创建表的更改&qu