IS NULL时的SQL Server Case语句

caf*_*ddt 52 sql sql-server sql-server-2008

我正在尝试在SQL服务器中执行IF语句类型函数.

如果字段中有NULL,我希望它从其中一个表中获取一个字段并添加10天.

如果可能的话,创建另一个列并添加30天.

SELECT DISTINCT
    B.[ID],
    MAX(A.[START DATE]),
    B.[STAT],
    C.[POST DATE],
    CASE
          WHEN (C.[POST DATE] BETWEEN C.[EVENT DATE]+10 AND C.[EVENT DATE]+30) THEN 'GOOD'
          END AS [BETTER VISIT],
    CASE
          WHEN B.[STAT] IS NULL THEN (C.[EVENT DATE]+10)
          ELSE '-'
          END AS [DATE]
FROM 
    #TEMP1 A
    FULL OUTER JOIN #TEMP2 B
    ON A.[ID]=B.[ID]
    FULL OUTER JOIN #TEMP3 C
    ON A.[ID]=C.[ID]
GROUP BY
    B.[ID],
    B.[STAT],
    C.[POST DATE],
    C.[EVENT DATE]
ORDER BY
    A.[START DATE] DESC
Run Code Online (Sandbox Code Playgroud)

结果看起来有点像:

    ID  START DATE   STAT    POST DATE    BETTER VISIT    DATE         DATE2
    ---------------------------------------------------------------------------
    1   2013-01-01   GOOD    2013-11-01   GOOD            -            -
    2   2013-03-01   NULL    NULL         NULL            2013-03-11   2013-03-31
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 70

CASE WHEN B.[STAT] IS NULL THEN (C.[EVENT DATE]+10)   -- Type DATETIME
     ELSE '-'                                         -- Type VARCHAR
     END AS [DATE]
Run Code Online (Sandbox Code Playgroud)

您需要为字段选择一种类型或另一种类型,字段类型不能按行变化.最简单的是删除它ELSE '-'并让它隐含地获取值NULL而不是第二种情况.


Gor*_*off 13

我同意Joachim你应该用连字符替换连字符NULL.但是,如果你真的想要一个连字符,请将日期转换为字符串:

(CASE WHEN B.[STAT] IS NULL
      THEN convert(varchar(10), C.[EVENT DATE]+10, 121)
      ELSE '-'
 END) AS [DATE]
Run Code Online (Sandbox Code Playgroud)

此外,distinct您的select陈述中没有必要.在group by已经这样做了你.


小智 5

  case isnull(B.[stat],0)
  when 0 then dateadd(dd,10,(c.[Eventdate]))
  end
Run Code Online (Sandbox Code Playgroud)

如果要将 30 天添加到相同的 .


Abd*_*aid 5

在这种情况下,您可以使用 ISNULL() 函数代替 CASE 表达式

ISNULL(B.[STAT], C.[EVENT DATE]+10) AS [DATE]
Run Code Online (Sandbox Code Playgroud)


Xin*_*Xin 5

你可以使用IIF(我想从SQL Server 2012)

SELECT IIF(B.[STAT] IS NULL, C.[EVENT DATE]+10, '-') AS [DATE]
Run Code Online (Sandbox Code Playgroud)


Kee*_*Wit 0

看一下 ISNULL 函数。它可以帮助您将 NULL 值替换为其他值。http://msdn.microsoft.com/en-us/library/ms184325.aspx