ebo*_*ens 11 sql t-sql sql-server
我正在为SQL Server中的设备/资产数据库做一个相当复杂的方面,并且想请求一些帮助.我会尝试在这里关注一个问题,然后针对另一个问题提出单独的问题.
我有一个设备表tblEquipment和一个表,用于需要对设备集合执行的操作(tblActionsRequired),为了这个问题,相关领域是:
tblEquipment: EquipmentID, BasedAtID, AreaIDtblRequiredActions: AllSites (bit), BasedAtID, AreaID因此tblRequiredActions,您的想法是,您要说公司A站点的所有设备都需要经常检查.区域是一个站点的特定房间或办公室等.因此,如果AllSites为true,则该操作适用于公司范围内的所有设备,如果它是假的,则需要BasedAtID(对于该站点),如果您想要将其缩小范围,则AreaID是可选的.
那么现在要解决的问题是应该根据这三个领域应用哪些设备.
我现在所拥有的是我认为可行的,但我正在努力验证我的结果,因为还有其他因素让我感到困惑,所以如果我完全走错了路,我会非常感谢你的确认或指导!我不想走存储过程的路线,如果是块或联合,因为有许多其他维度需要用相似的原则来涵盖,我最终会编写一个大规模复杂的程序,这将是一个噩梦来维持.谢谢!!
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
Run Code Online (Sandbox Code Playgroud)
小智 6
现有的查询对我来说非常好,虽然它可以略微简化:
SELECT dbo.tblActionsRequired.ActionID, dbo.tblEquipment.EquipmentID
FROM dbo.tblEquipment
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 = dbo.tblActionsRequired.AreaID
Run Code Online (Sandbox Code Playgroud)
- 因为如果a.AreaID和e.AreaID都为null,则条件dbo.tblEquipment.AreaID = dbo.tblActionsRequired.AreaID不会计算为true.
(括号不是严格要求的,但为了清楚起见,包括在内.)