【发布时间】:2016-11-25 16:57:07
【问题描述】:
我有一个仓库,货架上有方形空间,用于放置我的相同尺寸和装在盒子里的产品。
货架上的空间大小不一,我最多可以放置 X 个盒装产品。空间的大小可以是可变的。出于这个原因,我有一个表空间,其中有一列 MaximumCapacity。
我正在尝试在系统中映射这些空间,以了解是否仍有可用容量并快速解决我的空间可以容纳另一个盒装产品的机架。这可以表示仓库的层次结构
+ Warehouse (1 warehouse)
+ Racks (5 000 racks)
+ Spaces (10 000 spaces)
+ Products (1 to N per space)
我一直在尝试做一个 SQL Server 2008 视图来获取我的空间与产品。
我有一个带有 MaximumCapacity 列的空间表,用于指定其中可以存放多少产品。我还有另一张桌子叫ProductLocation。
我正在执行左连接以首先检索我的空间及其所有分配或产品位置。
SELECT
s.ID, s.Code,
s.MaximumCapacity,
pl.ProductCode
FROM
Space s
LEFT JOIN
ProductLocation pl ON s.ID = pl.SpaceID
这正在返回类似的东西
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)。
我如何根据空间的最大容量过滤(WHERE)以避免这 2 行最后得到这个:
Code - Maximum capacity - ProductCode
-----------------------------------------
SPACE 1 - 4 - PRODUCT1
SPACE 1 - 4 - PRODUCT2
SPACE 2 - 8 - PRODUCT3
我在没有更多空间的情况下检索所有不必要的空间时遇到性能问题。
提前致谢。
【问题讨论】:
-
ProductLocation 表中的每个产品是否正好占用 1 个空间?如果不是,那么它占用的空间量是如何确定的?
-
空间配置了最大容量,比如说 3。然后 ProductLocation 代表该容量空间的一部分。因此,如果我在 ProductLocation 中添加 2 个产品,我将有空间容纳另外 1 个产品。如果我再添加 1 个产品。产品数量 = 3 vs 空间容量 = 3,则将跳过行。
-
所以,是吗? ProductLocation 中的每个产品/行恰好占用 Space 表中 MaximumCapacity 的一个空间?
-
没错。一开始我误解了你的问题。
标签: sql-server sql-server-2008 view capacity