gpt4 book ai didi

SQL Server 基于列值的条件连接

转载 作者:行者123 更新时间:2023-12-02 09:34:04 25 4
gpt4 key购买 nike

我正在研究 SQL Server 中设备/ Assets 数据库的相当复杂的方面,并且想寻求一些帮助。我将尝试在这里专注于一个问题,然后针对另一个问题提出一个单独的问题。

为了解决这个问题,我有一个名为 tblEquipment 的设备表和一个需要对设备集合执行所需操作的表 (tblActionsRequired)相关字段是:

  • tblEquipment:EquipmentID、BasedAtID、AreaID
  • tblRequiredActions:所有站点(位)、BasedAtID、AreaID

因此,tblRequiredActions 的想法是,您会说公司站点 A 的所有设备都需要经常检查。区域是站点上的特定房间或办公室等。因此,如果 AllSites 为 true,则操作适用于公司范围内的所有设备,如果为 false,则需要 BasedAtID(对于站点),如果您想进一步缩小范围,则 AreaID 是可选的。

现在的问题是根据这三个字段提取哪些操作应该应用于哪些设备。

我现在所拥有的是我认为可能有效的方法,但我正在努力验证我的结果,因为还有其他因素也让我感到困惑,所以如果我完全走在错误的轨道上,我真的很感激一些确认或指导!我不想走存储过程以及 if block 或联合的路线,因为还有多个其他维度需要用类似的原则来覆盖,我最终会编写一个非常复杂的过程,维护起来将是一场噩梦。谢谢!!

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。

(括号不是严格必需的,但为了清楚起见而包含在内。)

关于SQL Server 基于列值的条件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15660765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com