我遇到了一个资产数据库问题,我一直在为MSSQL中的客户开发。需要捕获Required Actions
,例如Lifting Equipment
在特定位置需要在购买后6个月进行检查。这些必需操作的Due Dates
可以通过不同方式计算,但此处的简化将根据其Purchase Date
进行计算。
为此,我有一个名为tblActionsRequired
的表,其中包含以下相关字段:
ActionID
- 需要采取的措施EquipmentCategoryID
或EquipmentTypeID
或EquipmentID
- 因此需要其中一个字段。通过这种方式,他们指定某类设备或设备类型或特定设备需要采取措施。例如,一个2公斤的粉末消防栓将是一种设备类型,它将属于消防安全设备类别,可能会有一个特定的2公斤粉末消防栓,资产编号为PFH2KG001。BasedAtID
- 公司的分支机构或网站理想情况下,我想要做的是尽可能多地保留在一个查询中,而不是为每个组合创建单独的查询或视图,然后使用UNION将它们添加到一起。我有几个其他类似的字段,通过这些字段可以分割这些必需的操作,所以这里看起来很简单,只是使用工会,但我已经计算出我需要满足48种不同的组合,并且可能为每个组合创建一个视图,然后UNION它们一起!
接下来我的tblEquipment
包含以下相关密钥:
EquipmentID
- 主键EquipmentTypeID
=外键,设备类型此资产是BasedAtID
- 外键,资产所在的网站 Equipment Types
然后属于Equipment Categories
,然后类别允许构建具有父子关系的树结构,但是我认为我已经充分注意创建一个名为{{1的视图使用以下字段:
vwCategoryTree
ParentCategoryID
此视图已经过测试并且检查结果很好,它会切断树形结构,并允许您使用EquipmentTypeID
在EquipmentTypeID
及其最终父母之间执行连接。
我需要帮助的是如何根据EquipmentCategoryID,EquipmentTypeID或EquipmentID中的哪个字段具有值,在tblActionsRequired和tblEquipment之间进行某种条件连接。如果只能指定EquipmentID或EquipmentTypeID,那么我认为这样可行:
EquipmentCategoryID
但是,如何将第三个表格引入此联接以满足EquipmentCategoryID或至少避免使用UNION?
对不起,如果没有意义,请问!非常感谢你!
答案 0 :(得分: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)