首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Server“检查空间中的容量可用性”

使用Server“检查空间中的容量可用性”
EN

Stack Overflow用户
提问于 2016-11-25 16:57:07
回答 2查看 101关注 0票数 1

我有一个仓库,在货架上有方形的空间,可以把我的产品放在同样大小的盒子里。

在机架中有空间可以改变大小,我可以放置最大的X盒装产品。空间的大小可以是可变的。因此,我有一个表空间,其中有一个列MaximumCapacity

我正试图在一个系统中映射这些空间,以了解是否仍有容量可用,并快速定位到我的空间可以容纳另一个盒装产品的机架。这可以表示仓库的层次结构。

代码语言:javascript
运行
复制
+ Warehouse (1 warehouse)
  + Racks (5 000 racks)
     + Spaces (10 000 spaces)
         + Products (1 to N per space)

我一直在尝试使用Server 2008视图来获取空间和产品。

我有一个带有列MaximumCapacity的空间表,用于指定可以在其中保存多少产品。我有另一张桌子叫ProductLocation

我正在做一个左连接,首先检索我的空间和它的所有赋值或产品的位置。

代码语言:javascript
运行
复制
SELECT 
    s.ID, s.Code,
    s.MaximumCapacity,
    pl.ProductCode
FROM 
    Space s
LEFT JOIN 
    ProductLocation pl ON s.ID = pl.SpaceID

这是回像这样的东西

代码语言:javascript
运行
复制
Code    - Maximum capacity - ProductCode
-----------------------------------------
SPACE 1 -         4        - PRODUCT1
SPACE 1 -         4        - PRODUCT2
SPACE 2 -         8        - PRODUCT3
SPACE 3 -         2        - PRODUCT4
SPACE 3 -         2        - PRODUCT5

这些数据将在C#中以更好的方式重新排列,但重点是,为了避免网络流量用于检索没有产品空间的空间,我只想检索具有可用容量的记录。我一直在努力想办法,但没有成功。在结果示例中,SPACE3的最大容量为2,并且已经有2种产品(PRODUCT4和PRODUCT5)。

如何根据空间的最大容量来筛选(哪里)以避免这2行,最终得到以下结果:

代码语言:javascript
运行
复制
Code    - Maximum capacity - ProductCode
-----------------------------------------
SPACE 1 -         4        - PRODUCT1
SPACE 1 -         4        - PRODUCT2
SPACE 2 -         8        - PRODUCT3

我有一个性能问题,以检索所有不必要的空间,没有更多的空间。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-25 17:36:06

请尝尝这个。

代码语言:javascript
运行
复制
declare @Space table (ID int, Code varchar(20), MaximumCapacity int)
declare @ProductLocation table(SpaceID int, ProductCode varchar(20))

insert into @Space values
(1, 'Space 1', 4)
,(2, 'Space 2', 8)
,(3, 'Space 3', 2)
insert into @ProductLocation values
(1, 'Product1')
,(1, 'Product2')
,(2, 'Product3')
,(3, 'Product4')
,(3, 'Product5');

计算每个空间的产品数量,并排除那些小于最大值的产品。

代码语言:javascript
运行
复制
with cte as(
SELECT s.ID,
  s.Code,
  s.MaximumCapacity,
  pl.ProductCode,
  count(pl.SpaceID) over(partition by pl.spaceid) as ProductCount
FROM @Space s
LEFT JOIN @ProductLocation pl ON s.ID = pl.SpaceID

)select ID, Code, MaximumCapacity, ProductCode from cte
Where ProductCount<MaximumCapacity
票数 0
EN

Stack Overflow用户

发布于 2016-11-25 17:27:32

这应该能起作用

代码语言:javascript
运行
复制
declare @space table (spaceid int, maximumCapacity int);

insert into @space values(1,4);
insert into @space values(2,8);
insert into @space values(3,2);

declare @productlocation table (productcode varchar(10), spaceid int);

insert into @productlocation values ('product1', 1);
insert into @productlocation values ('product2', 1);
insert into @productlocation values ('product3', 2);
insert into @productlocation values ('product4', 3);
insert into @productlocation values ('product5', 3);

with cte as (
    select spaceid,
        count(*) productcount
    from @productlocation
    group by spaceid
)
select s.spaceid, maximumCapacity, productcode
from @space s
inner join cte on s.spaceid = cte.spaceid
inner join @productlocation p on s.spaceid = p.spaceid
where cte.productcount < s.maximumCapacity
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40809596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档