如何连接两个或多个子查询或子查询
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
我不知道如何命名,因为我不确定如何解决或是否可以解决。
我有一个由不同组件制成的产品列表,我想知道我可以生产多少,这些组件可以通过其他组件生产。
假设这是我的 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