【发布时间】:2009-02-25 15:55:08
【问题描述】:
我正在尝试编写一个存储过程,它将根据以下规则为每条记录返回两个计算值,但我还没有弄清楚如何构建 SQL 来实现它。我正在使用 SQL Server 2008。
首先,相关的表格和与问题相关的字段。
生产运行
RunID (key, and RunID is given to the stored proc as its parameter)
ContainerName
ProductName
TemplateID
模板测量
MeasurementTypeID
TemplateID
简单边界
MeasurementTypeID
TemplateID
UpperBound
LowerBound
容器边界
MeasurementTypeID
TemplateID
UpperBound
LowerBound
ContainerName
产品边界
MeasurementTypeID
TemplateID
UpperBound
LowerBound
ProductName
这就是我想要返回的。我想为每个 TemplateMeasurements 记录返回一个计算的上限和下限值,该记录与具有提供的 runID 的 ProductionRuns 记录匹配。
计算的上限和下限基本上得到了作为简单、容器和产品边界的结果可以获得的最严格的边界,如果它们符合条件的话。
如果存在具有正确 MeasurementTypeID 和 TemplateID 的 SimpleBounds 记录,则该记录将成为特定 MeasurementTypeID 和 TemplateMeasurements 记录的限定范围之一。
要使 ContainerBound 记录符合条件,TemplateID 和 MeasurementTypeID 必须匹配,而且 ContainerName 必须与 ProductionRuns 记录中的 ContainerName 值匹配。对于 ProductBounds 也是如此,但对于 ProductName。
对于特定的MeasurementTypeID,获取所有限定范围,并找到最小的Upper Bound,这将是要返回的计算的Upper Bound。找到限定符的最大下界,这将是返回的下界。
不过,我不知道如何组合 SQL 来执行此操作。
此外,如果三个绑定表都不符合特定 MeasurementTypeID 的条件,则可能返回 null。
我的想法是某种左外连接,但我不确定如何将其扩展到三个结果中可能都为 null 的表。
感谢您的帮助。
【问题讨论】:
标签: sql sql-server tsql join