我正在研究SQL Server中“设备/ Assets ”数据库的一个相当复杂的方面,并希望寻求帮助。我将在这里尝试着重解决一个问题,然后再针对另一个问题提出另一个问题。
我有一个名为tblEquipment
的设备表和一个需要在设备集合上执行的必需操作的表(tblActionsRequired
),出于这个问题,相关字段为:
tblEquipment
:EquipmentID, BasedAtID, AreaID
tblRequiredActions
:AllSites (bit), BasedAtID, AreaID
因此,使用
tblRequiredActions
的想法是,您需要经常检查站点A公司的所有设备。区域是站点中特定的房间或办公室等。因此,如果AllSites为true,则该操作适用于公司范围内的所有设备,如果为false,则需要BaseAtAtID(用于站点),如果要进一步缩小范围,则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
最佳答案
现有查询对我来说看起来不错,尽管可以稍微简化一下:
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
-因为如果a.AreaID和e.AreaID都为null,则条件
dbo.tblEquipment.AreaID = dbo.tblActionsRequired.AreaID
的结果不为true。(并非严格要求括号,但为了清楚起见,将其包括在内。)