我需要在SQL Server中执行SQL请求,如下所示:
Select *
From Table_A
LEFT JOIN dbo.Table_2 ON Table_2.Val1 = Table_A.Val1
AND (CASE WHEN Table_A.TADT IS NOT NULL AND Table_A.HSDT IS NOT NULL THEN Table_A.TADT >= Table_A.HSDT END)
它返回错误
> =
的语法不正确
如果我删除案例并直接执行:
Select *
From Table_A
LEFT JOIN dbo.Table_2 ON Table_2.Val1 = Table_A.Val1 AND Table_A.TADT >= Table_A.HSDT
没关系,我只需要在“if”中加入此测试。
如何在SQL中为SQL Server数据库执行此操作?
非常感谢,
致以最诚挚的问候,
答案 0 :(得分:1)
只需应用布尔逻辑,不需要CASE
表达式(根据定义,它总是产生一个值):
Select *
From Table_A
LEFT JOIN dbo.Table_2 ON Table_2.Val1=Table_A.Val1 And
( Table_A.TADT IS NULL OR
Table_A.HSDT IS NULL OR
Table_A.TADT >= Table_A.HSDT
)
答案 1 :(得分:0)
我不建议在比较中使用case
,但您可以使用以下结构:
ON Table_2.Val1 = Table_A.Val1 AND
1 = (CASE WHEN Table_A.TADT IS NOT NULL AND Table_A.HSDT IS NOT NULL AND
Table_A.TADT >= Table_A.HSDT
THEN 1
WHEN Table_A.TADT IS NOT NULL AND Table_A.HSDT IS NOT NULL
THEN 0
ELSE 0
END)
如果您希望第二次比较为真仅,当值不为空时,您只需执行以下操作:
ON Table_2.Val1 = Table_A.Val1 AND Table_A.TADT >= Table_A.HSDT
NULL
值不会通过此。
如果您希望仅当第二个条件为真或两个值均为NULL
时才进行比较,那么这就足够了:
ON (Table_2.Val1 = Table_A.Val1 AND
Table_A.TADT >= Table_A.HSDT OR
(Table_A.TADT IS NOT NULL AND Table_A.HSDT IS NOT NULL)
)
也就是说,将附加支票从then
移至when
条款。