【发布时间】:2012-03-14 06:41:30
【问题描述】:
我有一种情况,我需要从一个表中获取“消耗的数量”,并将其应用于第二个表,该表有 1 行或更多行是“合并批次”的数量。我不知道如何更好地描述它,这是我从表格的角度来看的意思:
Table Pooled_Lots
----------------------------
Id Pool Lot Quantity
1 1 1 5
2 1 2 10
3 1 3 4
4 2 1 7
5 3 1 1
6 3 2 5
Table Pool_Consumption
----------------------------
Id PoolId QuantityConsumed
1 1 17
2 2 8
3 3 10
我需要一个来自 SQL 查询的结果行集,如下所示:
Pool Lot Quantity QuantityConsumed RunningQuantity RemainingDemand SurplusOrDeficit
1 1 5 17 0 12 NULL
1 2 10 17 0 2 NULL
1 3 4 17 2 0 2
2 1 7 8 0 1 -1
3 1 1 10 0 9 NULL
3 2 5 10 0 4 -4
因此,Pool_Consumption.QuantityConsumed 需要是从 Pooled_Lots 的行中减去的“消耗值”,其中 Pool_Consumption.PoolId = Pooled_Lots.Pool。我不知道你会如何陈述这样的查询:
- 如果不在最后一行,AmtConsumedFromLot = Quantity - QuantityConsumed if QuantityConsumed
- 如果有更多行,QuantityConsumed = QuantityConsumed - Quantity
- 循环直到最后一行
- 如果最后一行,AmtConsumedFromLot = QuantityConsumed
假设 Id 是主键,目标 DB 是 SQL 2005。
编辑:由于人们宣称我“没有提供足够的信息,请关闭此”这里还有更多: Pool_Consumption 从中提取的 NO 设置批次,它需要从 all Pool_Consumption.PoolId = Pooled_Lots.Pool 的所有批次,直到 QuantityConsumed 完全耗尽或我减去 Pooled_Lots 行的最后一个子集,其中 Pool_Consumption.PoolId = Pooled_Lots.Pool
我不知道该怎么解释。这不是一个家庭作业问题,这不是一个虚构的“思想练习”。我需要帮助来弄清楚如何正确减去多行的 QuantityConsumed!
【问题讨论】:
-
我不知道为什么人们会赞成这个问题,你有一些严重的数据粒度问题。
Pool_Consumption表没有指定消耗的单位来自哪个批次。另外,我修正了一个错字。 -1 -
@JohnB 这是我目前面临的问题,尽可能简化,并且不泄露我工作中的机密数据。与其傲慢和宣称我在问一个不值得投票的愚蠢问题,也许您可以告诉我我需要在哪里添加“粒度”以使自己达到可以更轻松地产生所需输出的程度?
-
这不是傲慢,如果您还没有阅读我的第一条评论,请阅读我的第一条评论(您需要
Pool_Consumption表中的 Lot #)。另外,由于问题的质量,错别字太多(使其更难阅读),我对您投了反对票。 -
我是 +1 中的一员。我同意@John 的语气过于严厉。这个问题很好,OP花了时间解释场景,并提出了一个有效的SQL问题。很公平,将
Lot添加到Pool_Consumption会很有用。然而,我可以设想将消费与特定批次联系起来是不必要的甚至是未知的(因此记录不准确)的场景。业务规则似乎是先耗尽 PoolID 最低的池,然后级联。 -
对不起,我觉得我很苛刻。我想我很不高兴,因为数学不正确,尽管如此,我仍然理解你问题的重点。此外,您想要的结果集的原始格式让我失望,因为基于您的
Pool_Consumption架构是不可能实现的。我们花了 30 分钟解决您的问题,而不是制定解决方案。 :(
标签: sql sql-server sql-server-2005 tsql