【问题标题】:Conditional LEFT JOIN clause SQL Server where conditionality in second table条件 LEFT JOIN 子句 SQL Server where 条件在第二个表
【发布时间】:2023-03-29 11:34:02
【问题描述】:

我有一个视图 (v_Flat_DemogTDComps),其中包含以下字段(以及其他字段)

PatientID     Integer
[Start date]  DateTime
SystemicStart DateTime

我还有一张桌子 (Operation),上面有:

PatientID                Integer
[Operation/Reason Date]  DateTime
[Surgical]               Boolean
[Operation/Reason Name]  String

我想 LEFT JOIN v_Flat_DemogTDComps ON Operation 其中:

  1. PatientID = PatientID AND
  2. (
    If [Surgical] = 1 THEN [Operation/Reason Date] = SystemicStart OR If [Surgical] = 0 THEN [Operation/Reason Date] = [Start Date]
    )

最终,我想选择 v_Flat_DemogTDComps 中的所有内容以及 [Operation/Reason Name]

我尝试使用此解决方案并考虑创建两个操作视图(一个位于 Surgical=1 处,一个位于 Surgical=0 处):Case statement in Join Clause

但是,这似乎只适用于条件部分位于第一个表中的情况。 v_Flat_DemogTDComps 中没有任何内容可以确定我是否应该使用一种操作视图而不是另一种。

条件子句在第二张表时如何JOIN?

【问题讨论】:

    标签: sql sql-server join left-join


    【解决方案1】:

    使用OrAnd 运算符模拟If else。试试这个。

    ON v_Flat_DemogTDComps.PatientID = Operation.PatientID
    AND ( ( [Surgical] = 1
            AND [Operation/Reason Date] = SystemicStart )
            OR ( [Surgical] = 0
                AND [Operation/Reason Date] = [Start Date] ) ) 
    

    【讨论】:

    • 我也试过了,但它只返回 Surgical = 0 的值,其余为空。
    • @Matthew 您可以对数据和所需的输出进行采样。
    • 愚蠢的错误 - SystemicStart 记录了实际时间,而其他三个 DateTime 字段仅记录了 00:00:00.000。在相关字段上使用 CONVERT() 后,您的解决方案有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多