Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件左连接子句SQL Server,其中条件在第二个表中_Sql_Sql Server_Join_Left Join - Fatal编程技术网

条件左连接子句SQL Server,其中条件在第二个表中

条件左连接子句SQL Server,其中条件在第二个表中,sql,sql-server,join,left-join,Sql,Sql Server,Join,Left Join,我有一个视图(v_Flat\u DemogTDComps),其中包含以下字段(以及其他字段) 我还有一个表(操作),其中包含: 我想在操作上左键连接v_Flat\u DemogTDComps,其中: PatientID=PatientID和 ( 如果[手术]=1,则[手术/原因日期]=SystemStart或 如果[手术]=0,则[手术/原因日期]=[开始日期] ) 最后,我想选择v_Flat\u DemogTDComps中的所有内容以及[操作/原因名称] 我尝试使用此解决方案,并考虑创建两个手

我有一个视图(
v_Flat\u DemogTDComps
),其中包含以下字段(以及其他字段)

我还有一个表(
操作
),其中包含:

我想在
操作
上左键连接
v_Flat\u DemogTDComps
,其中:

  • PatientID=PatientID和

  • 如果[手术]=1,则[手术/原因日期]=SystemStart或 如果[手术]=0,则[手术/原因日期]=[开始日期]
    )

  • 最后,我想选择
    v_Flat\u DemogTDComps
    中的所有内容以及[
    操作/原因名称
    ]

    我尝试使用此解决方案,并考虑创建两个手术视图(一个是
    Surgical=1
    ,另一个是
    Surgical=0
    ):

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


    当条件子句位于第二个表中时,我如何联接?

    使用
    运算符模拟
    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()后,您的解决方案工作正常。
    PatientID                Integer
    [Operation/Reason Date]  DateTime
    [Surgical]               Boolean
    [Operation/Reason Name]  String
    
    ON v_Flat_DemogTDComps.PatientID = Operation.PatientID
    AND ( ( [Surgical] = 1
            AND [Operation/Reason Date] = SystemicStart )
            OR ( [Surgical] = 0
                AND [Operation/Reason Date] = [Start Date] ) )