【发布时间】:2013-07-25 21:39:19
【问题描述】:
我正在尝试在 SQL Server 中执行 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
【问题讨论】:
-
你现在得到的输出有什么问题?
-
Msg 242, Level 16, State 3, Line 1 将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。
-
IsNull 可能会有所帮助。 msdn.microsoft.com/en-us/library/ms184325.aspx
-
我将其更改为 ISNULL,现在错误为:Msg 4145, Level 15, State 1, Line 10 在预期条件的上下文中指定的非布尔类型表达式,靠近 'ISNULL '。
标签: sql sql-server sql-server-2008