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
'source' 카테고리의 다른 글
TypeScript의 개인 정적 속성 (0) | 2023.07.19 |
---|---|
UIButton:적중 영역을 기본 적중 영역보다 크게 만들기 (0) | 2023.07.19 |
다시 삽입하지 않고 PyMongo의 MongoDB 문서 배열에 항목 추가 (0) | 2023.07.19 |
숫자를 특정 범위로 클램프(클립, 제한)하려면 어떻게 해야 합니까? (0) | 2023.07.19 |
SQL/Oracle: 여러 열의 인덱스를 사용할 수 있는 경우 (0) | 2023.07.19 |