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 天添加到相同的 .
在这种情况下,您可以使用 ISNULL() 函数代替 CASE 表达式
ISNULL(B.[STAT], C.[EVENT DATE]+10) AS [DATE]
Run Code Online (Sandbox Code Playgroud)
你可以使用IIF(我想从SQL Server 2012)
SELECT IIF(B.[STAT] IS NULL, C.[EVENT DATE]+10, '-') AS [DATE]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319559 次 |
| 最近记录: |