0

我正在使用 SQL Server 2008 R2

我的 SQL 语句是这样的,为了避免插入之前出现双重数据:

select * from LETTRE_VOIT_TEMP where NOT EXISTS
(
select * from LETTRE_VOIT_FINAL lv
where lv.NOID = LETTRE_VOIT_TEMP.NOID AND
      lv.CODE_DEST = LETTRE_VOIT_TEMP.CODE_DEST AND
      lv.CODE_CLIENT = LETTRE_VOIT_TEMP.CODE_CLIENT AND
      lv.DATE_CLOTURE = LETTRE_VOIT_TEMP.DATE_CLOTURE AND 
      lv.DATE_CLOTUR_REEL =  LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL
) 

这工作正常,但现在我想添加一个条件:

  • 当数据LETTRE_VOIT_TEMP.DATE_CLOTURE is null,我不想比较。
  • 当数据LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL is null,我不想比较

我已经改变了这样的:

select * from LETTRE_VOIT_TEMP where NOT EXISTS
(
select * from LETTRE_VOIT_FINAL lv
where lv.NOID = LETTRE_VOIT_TEMP.NOID AND
      lv.CODE_DEST = LETTRE_VOIT_TEMP.CODE_DEST AND
      lv.CODE_CLIENT = LETTRE_VOIT_TEMP.CODE_CLIENT AND
      case LETTRE_VOIT_TEMP.DATE_CLOTURE 
       when is not null then  lv.DATE_CLOTURE = LETTRE_VOIT_TEMP.DATE_CLOTURE AND 
       end
      case LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL 
       when is not null then   lv.DATE_CLOTUR_REEL =  LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL
       end

) 

我收到语法错误。

4

2 回答 2

0

您的 CASE 陈述不正确。正确的语法是CASE WHEN {condition} THEN {result} END

SELECT * 
FROM LETTRE_VOIT_TEMP where NOT EXISTS
(
    SELECT *
    FROM LETTRE_VOIT_FINAL lv
    WHERE lv.NOID = LETTRE_VOIT_TEMP.NOID 
    AND lv.CODE_DEST = LETTRE_VOIT_TEMP.CODE_DEST 
    AND lv.CODE_CLIENT = LETTRE_VOIT_TEMP.CODE_CLIENT 
    AND CASE WHEN LETTRE_VOIT_TEMP.DATE_CLOTURE IS NOT NULL THEN lv.DATE_CLOTURE = LETTRE_VOIT_TEMP.DATE_CLOTURE END
    AND CASE WHEN LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL IS NOT NULL THEN lv.DATE_CLOTUR_REEL =  LETTRE_VOIT_TEMP.DATE_CLOTUR_REEL END

) 

您可能需要在您的 CASE 中添加一个 ELSE 语句1 = 1以避免另一个语法错误

于 2013-03-15T14:15:18.423 回答
0

您不能以这种格式测试 null

CASE field WHEN IS NULL THEN x

但是你可以像这样测试它:

CASE WHEN field IS NULL THEN x

应该注意的是,在 SQL Server 中,您可以使用以下语法,但不能使用 NULL

CASE field  WHEN condition1 THEN x
            WHEN condition2 THEN y
            ELSE z
END
于 2013-03-15T14:16:07.340 回答