SQL Server内部使用相同的表连接

时间:2017-08-26 21:45:31

标签: sql-server inner-join

我有一个库存表,可以计算我公司商店存储和主存储上分发的库存清单。现在我想分析一下,如果我在任何商店都有关键库存(这意味着少于5个商品)和主存储器中的足够资源,我必须通过查询将商品运送到该商店。我还有另一个主题,我可能会在主存储中添加新项目,所以我的查询必须提醒我每个商店至少发送5件。此外,如果我打开一个新商店(我将插入一个新的行与NULL模型,NULL库存到该表)它必须列出我第一天所需的库存。

感谢。

(顺便说一下,我想在SQL Server 2014中为个人开发而不是生产这样做。我在过去的12年中没有对任何程序进行过编码。)

Sample Table

更新:28/08/2017 10:42

对不起家伙,如果我不能很好地解释我的问题。我更新了我的referance表:dbo.stock

Referance Table 并查询输出: Query Output

所以 - 我想检查所有商店是否在他们的存储中都有公司生产, 如果公司开了一家新店,我必须找到它并且必须从所有产品中运送5件。

感谢。

1 个答案:

答案 0 :(得分:1)

每个商店的关键型号列表和库存中的主要资源(如果有)或cero

select a.sloc, a.model, a.stock critical, isnull(b.stock,0) 'Main Resources'
from stock a left join stock b on a.model=b.model and b.sloc='Main'
where a.stock<5

对于您的请求的最后一部分,我不确定新开设的商店需要什么。

编辑

此程序至少可以满足您的需求,不是最佳选择,但您可以稍后进行处理。

begin transaction

declare @initialStock int=5
declare @stockDecrease int=0

insert into stock (sloc, model, stock)
    select (select a.sloc
from stock a 
where a.stock is null) n, m.model, @initialStock
from stock m where m.sloc='Main'  
set @stockDecrease= @@ROWCOUNT/4*@initialStock

delete stock where stock is null

update stock 
set stock=stock-@stockDecrease
where sloc='Main' 

if exists (select 1 from stock where stock<0 and sloc='Main')
    rollback
else
    commit