我似乎无法弄清楚如何在sql中使用isnull或ifnull语句的相反方法。我需要说明a.Error1
是否为空 - 然后打印' - '
和+ CHAR(13)+CHAR(10)
。基本上如果a.Error1返回null,则不应该有破折号或没有新的换行符。因此,如果字段不为空,则打印信息。
select a. ....
' - ' + a.Error1 + CHAR(13)+CHAR(10) +
' - ' + a.Error2 + CHAR(13)+CHAR(10) +
' - ' + a.Error3 + CHAR(13)+CHAR(10) +
' - ' + a.Error4 + CHAR(13)+CHAR(10) +
' - ' + a.Error5 + CHAR(13)+CHAR(10) +
' - ' + a.Error6 as 'error_message'
...
from table1 a
例如,如果对于给定的记录error1,2和5返回输出,我希望输出如下:
- 错误1:有一个...
- 错误2:....
- 错误5:数据是......
如果该行没有错误,则应该只是一个空/空字段。
答案 0 :(得分:4)
您可以使用CASE
:
SELECT a. ....
(CASE WHEN a.Error1 IS NOT NULL
THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10)
ELSE ''
END) +
(CASE WHEN a.Error2 IS NOT NULL
THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10)
ELSE ''
END) +
(CASE WHEN a.Error3 IS NOT NULL
THEN ' - ' + a.Error3 + CHAR(13)+CHAR(10)
ELSE ''
END) +
...etc
答案 1 :(得分:1)
COALESCE功能可以满足您的需求。 COALESCE的结果是它传递的第一个NOT NULL值。下面我们使用'',它与NULL不同,因此外部+总是应用于NOT NULL字符串。
e.g。
select a. ....
COALESCE( ' - ' + a.Error1 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error2 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error3 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error4 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error5 + CHAR(13)+CHAR(10), '' ) +
COALESCE( ' - ' + a.Error6 , '' ) as 'error_message'
...
from table1 a
答案 2 :(得分:1)
是的!我知道我想晚5年了,但我也忽略了这个问题。
奇怪的是它不存在某种!ISNULL()而是什么。
请尝试以下更简洁的代码:
select a. ....
IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error1,
IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error2
from table1 a
了解有关IIF()函数的更多信息:SQL Server IIF Function
答案 3 :(得分:0)
SELECT (CASE WHEN a.Error1 IS NOT NULL
THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) +
ELSE a.Error1
END) +
(CASE WHEN a.Error2 IS NOT NULL
THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) +
ELSE a.Error2
END) +
.....etc