私はSQLServerの機器/資産データベースのかなり複雑な側面に取り組んでいます。助けを求めたいと思います。ここでは1つの問題に焦点を当ててから、別の問題について別の質問をします。
と呼ばれる機器の表と、機器tblEquipment
のコレクションに対して実行する必要のある必要なアクションの表(tblActionsRequired
)があります。この質問のために、関連するフィールドは次のとおりです。
tblEquipment
:EquipmentID, BasedAtID, AreaID
tblRequiredActions
:AllSites (bit), BasedAtID, AreaID
つまり、tblRequiredActions
サイトAのすべての機器を頻繁に検査する必要があるということです。エリアとは、サイト内の特定の部屋やオフィスなどです。したがって、AllSitesがtrueの場合、アクションは全社的なすべての機器に適用されます。falseの場合、BasedAtID(サイト用)が必要です。さらに絞り込む場合は、AreaIDはオプションです。
では、これら3つのフィールドに基づいて、どのアクションをどの機器に適用するかを抽出するという問題があります。
私が今持っているのはうまくいくと思うものですが、他にも混乱する要因があるため、結果を確認するのに苦労しています。完全に間違った方向に進んでいる場合は、確認またはガイダンスをいただければ幸いです。ストアドプロシージャのルートに行きたくありません。同様の原則でカバーする必要のある他の複数のディメンションがあるため、ブロックまたはユニオンの場合、維持するのは悪夢となる非常に複雑なプロシージャを作成することになります。 。ありがとう!!
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