2013-04-02 105 views
-1

我遇到了一個資產數據庫的問題,我一直在爲MSSQL中的客戶開發。它需要捕獲Required Actions,例如Lifting Equipment在特定位置需要在購買後6個月進行檢查。這些所需動作的Due Dates可以用不同的方式進行計算,但在這裏簡化將根據它們的Purchase Date進行計算。有條件的SQL使用第三個表加入

所以爲此我有一個表叫tblActionsRequired包含下列相關字段:

  • ActionID - 爲行動所需的
  • EquipmentCategoryIDEquipmentTypeIDEquipmentID - 所以這些領域之一是必需的或者。因此,他們規定,對於設備類別或設備類型或特定設備都需要採取措施。所以一個例子是,一個2kg粉末消防栓是一種設備類型,它將屬於消防安全設備類別,可能會有一個特定的2kg粉末消防栓,其資產編號爲PFH2KG001。
  • BasedAtID - 該公司的分公司或網站

理想我想要做的就是繼續儘可能地在一個查詢,而不是爲每個組合創建單獨的查詢或意見,然後將它們放在一起使用的是什麼聯合。我還有其他幾個類似的領域,通過這些領域,這些必需的動作可以被分割,所以在這裏看起來很簡單,但是我已經計算出我需要滿足48種不同的組合,並可能爲每個組合創建一個視圖,然後將它們聯合起來一起!

所以下次我有tblEquipment包含以下相關按鍵:

  • EquipmentID - 主鍵
  • EquipmentTypeID =外鍵,該設備類型這項資產的
  • BasedAtID成員 - 國外密鑰,該資產位於哪個站點

Equipment Types然後屬於t Ø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?

對不起,如果有什麼不合理的,請問!非常感謝你!

+0

爲什麼你要避免使用聯合查詢? –

+0

謝謝@DanBracuk,這只是我有幾個類似的領域,需要根據他們的價值不同的聯合。隨着每個額外的領域這是真實的,我必須聯合在一起的查詢數量呈指數增長。如果客戶希望我改變任何事情,這將是一場絕對的噩夢 – ebooyens

+0

從您所說的話來看,聽起來好像在類別內有很多級別的設備類別。如果是這樣,所需操作的設備類別可以在任何級別的層次結構中,或只有頂層? vwCategoryTree是否具有所有級別的類別的ParentCategoryID值,除最低級別或僅頂級別之外的所有級別? –

回答

1

一個可行的方法:

select ... 
from tblEquipment e 
left join vwCategoryTree c on e.EquipmentTypeID = c.EquipmentTypeID 
join tblActionsRequired r 
    on (e.EquipmentID = r.EquipmentID or 
     e.EquipmentTypeID = r.EquipmentTypeID or 
     c.ParentCategoryID = r.EquipmentCategoryID) 
+0

令人驚歎的,如此簡單,使絕對感謝你!我要去一趟,但看不到這是行不通的,真的很感激它@markbannister! – ebooyens

+0

@ebooyens:很高興我能幫上忙 - 我希望能爲你做好這份工作! –