我遇到了一個資產數據庫的問題,我一直在爲MSSQL中的客戶開發。它需要捕獲Required Actions
,例如Lifting Equipment
在特定位置需要在購買後6個月進行檢查。這些所需動作的Due Dates
可以用不同的方式進行計算,但在這裏簡化將根據它們的Purchase Date
進行計算。有條件的SQL使用第三個表加入
所以爲此我有一個表叫tblActionsRequired
包含下列相關字段:
ActionID
- 爲行動所需的EquipmentCategoryID
或EquipmentTypeID
或EquipmentID
- 所以這些領域之一是必需的或者。因此,他們規定,對於設備類別或設備類型或特定設備都需要採取措施。所以一個例子是,一個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?
對不起,如果有什麼不合理的,請問!非常感謝你!
爲什麼你要避免使用聯合查詢? –
謝謝@DanBracuk,這只是我有幾個類似的領域,需要根據他們的價值不同的聯合。隨着每個額外的領域這是真實的,我必須聯合在一起的查詢數量呈指數增長。如果客戶希望我改變任何事情,這將是一場絕對的噩夢 – ebooyens
從您所說的話來看,聽起來好像在類別內有很多級別的設備類別。如果是這樣,所需操作的設備類別可以在任何級別的層次結構中,或只有頂層? vwCategoryTree是否具有所有級別的類別的ParentCategoryID值,除最低級別或僅頂級別之外的所有級別? –