Я работаю над довольно сложным аспектом базы данных Equipment/Asset в SQL Server и хотел бы попросить о помощи. Я попытаюсь сосредоточиться на одной проблеме здесь, а затем задать отдельный вопрос для другой проблемы.
У меня есть таблица для оборудования под названием tblEquipment
и таблица необходимых действий, которые необходимо выполнить для коллекций оборудования (tblActionsRequired
), для этого вопроса соответствующие поля:
-
tblEquipment
:EquipmentID, BasedAtID, AreaID
-
tblRequiredActions
:AllSites (bit), BasedAtID, AreaID
Итак, идея с tblRequiredActions
заключается в том, что вы бы сказали, что все оборудование на сайте Site A необходимо проверять так часто. Районы - это конкретные комнаты или офисы и т.д. На сайте. Таким образом, если AllSites истинно, действие распространяется на все оборудование всей компании, если оно ложно, тогда требуется BaseAtID (для сайта), AreaID является необязательным, если вы хотите еще больше сузить его.
Итак, теперь проблема заключается в том, чтобы извлечь, какие действия должны применяться к тому, какое оборудование основывается на этих трех полях.
Теперь у меня есть то, что, как я думаю, может работать, но я изо всех сил пытаюсь проверить мои результаты, так как есть другие факторы, которые меня тоже путают, поэтому я бы очень признателен за подтверждение или руководство, если я полностью ошибаюсь! Я не хочу идти по пути хранимых процедур и блоков или союзов, поскольку есть несколько других измерений, которые должны быть покрыты схожим принципом, и я в конечном итоге напишу массово сложную процедуру, которая станет кошмаром для поддержания, Спасибо!!
SELECT
dbo.tblActionsRequired.ActionID, dbo.tblEquipment.EquipmentID
FROM
dbo.tblEquipment
INNER JOIN
dbo.tblActionsRequired ON dbo.tblActionsRequired.AllSites = 'True'
OR dbo.tblEquipment.AreaID IS NULL
AND dbo.tblEquipment.BasedAtID = dbo.tblActionsRequired.BasedAtID
OR dbo.tblEquipment.AreaID IS NOT NULL
AND dbo.tblEquipment.AreaID = dbo.tblActionsRequired.AreaID