条件左连接子句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] ) )