代码之家  ›  专栏  ›  技术社区  ›  user8521795

具有相同表的SQL Server内部联接

  •  -5
  • user8521795  · 技术社区  · 9 年前

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

    (顺便提一下,我想在SQL Server 2014中这样做是为了个人发展,而不是生产。我已经12年没有编写任何程序了)。

    Sample Table

    更新:2017年8月28日10:42

    Referance Table 然后像这样查询输出: Query Output

    所以-我想检查一下所有商店的仓库中是否都有公司生产的产品, 若公司开了一家新店,我必须找到它,并从所有产品中运送5件。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Horaciux    9 年前

    每个门店的关键型号清单以及库存的主要资源(如有)或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