source

SQL Server 케이스 문(IS NULL인 경우)

manysource 2023. 7. 19. 21:26

SQL Server 케이스 문(IS NULL인 경우)

나는 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

결과는 다음과 같습니다.

    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
CASE WHEN B.[STAT] IS NULL THEN (C.[EVENT DATE]+10)   -- Type DATETIME
     ELSE '-'                                         -- Type VARCHAR
     END AS [DATE]

필드 유형을 선택해야 합니다. 필드 유형은 행별로 다를 수 없습니다.가장 간단한 것은 다음을 제거하는 것입니다.ELSE '-'그리고 그것이 암묵적으로 가치를 얻게 하라.NULL대신에 두 번째 경우에.

하이픈을 다음으로 교체해야 한다는 요아힘의 의견에 동의합니다.NULL그러나 하이픈을 사용하려면 날짜를 문자열로 변환합니다.

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

그리고 또.distinct당신에게 필요하지 않습니다.select진술.group by이미 당신을 위해 이것을 합니다.

사용할 수 있습니다.IIF(SQL Server 2012부터라고 생각합니다.)

SELECT IIF(B.[STAT] IS NULL, C.[EVENT DATE]+10, '-') AS [DATE]
  case isnull(B.[stat],0)
  when 0 then dateadd(dd,10,(c.[Eventdate]))
  end

동일한 날짜에 30일을 추가하려면 다른 문을 추가할 수 있습니다.

이 경우 CASE 식 대신 ISNULL() 함수를 사용할 수 있습니다.

ISNULL(B.[STAT], C.[EVENT DATE]+10) AS [DATE]

ELSE 문에 있는 하이픈이 datetime 데이터 유형 아래에 정의된 열에서 허용되지 않습니다.다음 중 하나를 수행할 수 있습니다.

[stat] 필드 주위에 CAST를 감아서 날짜의 막대 표시로 변환합니다.

ELSE 값에는 9999-12-31과 같은 날짜를 사용합니다.

mssql에 대한 Mahesh 솔루션의 약간의 변화:

case when isnull(B.[stat],0) = 0 
     then dateadd(dd,10,(c.[Eventdate]))  
end

ISNULL 기능을 살펴봅니다.다른 값에 대한 NULL 값을 바꿀 수 있습니다.http://msdn.microsoft.com/en-us/library/ms184325.aspx

여기에 정답이 있고 이 질문은 10년 전의 것입니다.ISNULL은 COALESCE의 별칭이며 테스트는 빈도가 높은 내림차순으로 수행되어야 하며 이는 DRY를 중단한다는 것을 알고 있습니다.

COALESCE NULLs

CASE  COALESCE(B.[STAT],'-')
      WHEN '-' THEN '-'
      ELSE (C.[EVENT DATE]+10)
END AS [DATE]

이 코드를 코딩하는 다른 방법도 있지만, 읽을 수 있고 현지화되어 있습니다.내포는 더 복잡합니다.

언급URL : https://stackoverflow.com/questions/17869227/sql-server-case-statement-when-is-null