如何解决如何连接两个或多个子查询或子选择
我有一份由不同组件制成的产品清单,我想知道我可以生产多少产品,考虑到这些组件可以通过其他一些组件生产。
假设这是我的产品结构表:
CODE COMPONENT NEEDED
PROD1 BLISTER 1
PROD1 Box 1
PROD1 TOY 1
TOY RIGHT ARM 1
TOY LEFT ARM 1
TOY EYE 2
我有这只股票:
CODE STOCK
PROD1 100
BLISTER 100
Box 50
TOY 15
RIGHT ARM 20
LEFT ARM 20
EYE 40
(SELECT min(isnull(STK.STOCK/STR.NEEDED,0))
from STRUCTURE STR
left join STOCKWAREHOUSE STK
on STR.COMPONENT = STK.CODE
where STR.CODE = ART.CODE) as PRODUCIBLE
现在显示如下:
CODE PRODUCIBLE
PROD1 15
TOY 20
我不知道如何计算我也可以生产的组件(例如玩具)。我想我应该连接该表两次,连接到自身,但我不知道如何将每个组件与该组件的可生产量相加。
想要的结果是这样的:
CODE PRODUCIBLE
PROD1 35
TOY 20
编辑:
多亏了答案,我设法总结了两个产品,但它没有按预期工作。假设一个盒子由这些组件组成:
COMPONENT STOCK PRODUCIBLE
TOY1 400 150
TOY2 150 100
TOY3 0 100
TOY4 100 10
现在,它计算第一层盒子的最小可生产量:0(因为TOY3),第二层的最小可生产量:10(因为TOY4),然后将两者相加:0+ 10.我需要将库存与可生产量相加,返回 100。
问我是否需要澄清任何事情。非常感谢!
EDIT2: Nvm,通过从主表调用组件并对其库存求和来修复。
解决方法
这看起来像一个业务逻辑,所以我认为你不应该在数据库级别这样做。
下面的查询应该会为您提供的数据提供您想要的输出。
第一个子查询是您提供的,第二个子查询在组件级别查看相同的输出。最后,您将在选择中添加可生产的。
select a.code1 as Code,a.p1 + isnull(c.p,0) as PRODUCIBLE
from
(
SELECT STR.CODE code1,min(isnull(STK.STOCK/STR.NEEDED,0)) p1
from STRUCTURE STR
left join STOCK STK
on STR.COMPONENT = STK.CODE
GROUP BY STR.CODE
) as a
full outer join
(
select s.CODE code,code component,b.p
from STRUCTURE s
join
(SELECT STR.CODE code,0)) p
from STRUCTURE STR
left join STOCK STK
on STR.COMPONENT = STK.CODE
GROUP BY STR.CODE
) as b on b.code = s.COMPONENT
) as c on a.code1 = c.code
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。