如何连接两个或多个子查询或子查询

How to connect two or more subqueries or subselects

我不知道如何命名,因为我不确定如何解决或是否可以解决。

我有一个由不同组件制成的产品列表,我想知道我可以生产多少,这些组件可以通过其他组件生产。

假设这是我的 table 产品结构:

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

我不知道如何计算我可以生产的组件(比如玩具)。我想我应该加入 table 两次,连接到自身,但我不知道如何将每个组件与该组件的可生产数量相加。

想要的结果是这样的:

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,通过从 main table 调用组件并对其库存求和来修复。

这看起来像是业务逻辑,所以我认为您不应该在数据库级别执行此操作。

下面的查询应该会为您提供所需的数据输出。

第一个子查询是您提供的内容,第二个子查询在组件级别查看相同的输出。最后,您在 select.

上添加了两个可生产的
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,  min(isnull(STK.STOCK/STR.NEEDED,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