Я пытаюсь написать хранимую процедуру, которая будет возвращать два вычисленных значения для каждой записи в соответствии с правилами ниже, но я не выяснил, как структурировать SQL, чтобы это произошло. Я использую SQL Server 2008.
Во-первых, соответствующие таблицы и поля, имеющие значение для проблемы.
ProductionRuns
RunID (key, and RunID is given to the stored proc as its parameter)
ContainerName
ProductName
TemplateID
TemplateMeasurements
MeasurementTypeID
TemplateID
SimpleBounds
MeasurementTypeID
TemplateID
UpperBound
LowerBound
ContainerBounds
MeasurementTypeID
TemplateID
UpperBound
LowerBound
ContainerName
ProductBounds
MeasurementTypeID
TemplateID
UpperBound
LowerBound
ProductName
И это то, что я пытаюсь вернуть. Я хочу вернуть рассчитанную верхнюю и нижнюю граничные значения для каждой записи TemplateMeasurements, у которой есть соответствующий TemplateID с записью ProductionRuns, у которой есть предоставленный runID.
Рассчитанные верхние и нижние границы в основном получают самую жесткую границу, которая может быть получена в результате простых, контейнерных и товарных границ, если они соответствуют требованиям.
Если существует запись SimpleBounds с правильными MeasurementTypeID и TemplateID, то она становится одной из квалификационных границ для конкретного MeasurementTypeID и записи TemplateMeasurements.
Чтобы запись ContainerBound соответствовала требованиям, TemplateID и MeasurementTypeID должны совпадать, но также ContainerName должно совпадать со значением для ContainerName в записи ProductionRuns. То же самое относится и к ProductBounds, но для ProductName.
Для конкретного MeasurementTypeID возьмите все подходящие границы и найдите наименьшую верхнюю границу, и это будет рассчитанная верхняя граница, которая должна быть возвращена. Найдите наибольшую нижнюю границу квалификаторов, и это будет возвращенная нижняя граница.
Однако я не знаю, как собрать SQL для этого.
Кроме того, если ни одна из трех связанных таблиц не подходит для определенного MeasurementTypeID, тогда может быть возвращено значение NULL.
Я бы подумал, что это будет какое-то левое внешнее объединение, но я не уверен, как расширить это до трех таблиц, которые могут иметь нулевые результаты.
Спасибо за помощь.