微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何连接两个或多个子查询或子选择

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

我有一份由不同组件制成的产品清单,我想知道我可以生产多少产品,考虑到这些组件可以通过其他一些组件生产。

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

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?