我正在研究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。

    (并非严格要求括号,但为了清楚起见,将其包括在内。)

    10-05 19:29