-1

MSSQL の顧客向けに開発している資産データベースに問題があります。Required ActionsたとえばLifting Equipment、購入後 6 か月後に特定の場所を検査する必要がある場合などです。これらの必要なアクションのDue Datesはさまざまな方法で計算できますが、ここでは簡略化するために、それらの に基づいて計算されますPurchase Date

そのためtblActionsRequiredに、次の関連フィールドを含むというテーブルがあります。

  • ActionID - 必要なアクション
  • EquipmentCategoryIDまたはEquipmentTypeIDまたはEquipmentID- これらのフィールドのいずれかが必須です。これにより、機器のカテゴリ、機器タイプ、または特定の機器に対してアクションが必要であることを指定します。たとえば、2kg 粉末消火栓は設備タイプであり、それは火災安全装置のカテゴリに分類され、資産番号が PFH2KG001 の特定の 2kg 粉末消火栓が存在する可能性があります。
  • BasedAtID- 会社の支店またはサイト

理想的には、すべての組み合わせに対して個別のクエリまたはビューを作成し、UNION を使用してそれらを追加するのではなく、1 つのクエリにできるだけ多くを保持することです。これらの必要なアクションをセグメント化できる類似のフィールドが他にもいくつかあるため、ここではユニオンを使用するだけで十分に単純に思えるかもしれませんが、48 の異なる組み合わせに対応し、おそらくそれぞれのビューを作成し、それらを UNION する必要があると計算しました一緒!

次にtblEquipment、次の関連キーを含むものがあります。

  • EquipmentID- 主キー
  • EquipmentTypeID= このアセットが属する機器タイプの外部キー
  • BasedAtID- アセットが配置されているサイトの外部キー

次にEquipment Types所属し、カテゴリを使用すると、親子関係を持つツリー構造を構築できますが、これらは、次のフィールドでEquipment Categories呼び出されるビューを作成する際に十分に注意したと思います。vwCategoryTree

  • ParentCategoryID
  • EquipmentTypeID

このビューはテスト済みで、問題なくチェックアウトされています。ツリー構造を切り抜けて、EquipmentTypeIDとその最終的な親の間で結合を実行できますEquipmentCategoryID

私が助けを必要としているのは、EquipmentCategoryID、EquipmentTypeID、または EquipmentID のどのフィールドに値があるかに基づいて、tblActionsRequired と tblEquipment の間である種の条件付き結合を行う方法です。EquipmentID または EquipmentTypeID のみを指定できれば、これでうまくいくと思います。

ON (tblActionsRequired.EquipmentID IS NOT NULL AND tblEquipment.EquipmentID = tblActionsRequired.EquipmentID) OR (tblActionsRequired.EquipmentTypeID IS NOT NULL AND tblActionsRequired.EquipmentTypeID = tblEquipment.EquipmentTypeID)

しかし、EquipmentCategoryID に対応するために、または少なくとも UNION を使用する必要を回避するために、この結合に 3 番目のテーブルをどのように持ち込むのですか?

意味不明なところがあったらすみません、気軽に聞いてください!どうもありがとうございました!

4

1 に答える 1