我需要将表的几列连接成一个值,然后在asp下拉列表中显示该值。我发出的SQL代码如下:
SELECT UserID,CustomerNum,UserName +' - '+ UserAddress +','+ UserCity +''+ UserState AS UserInfo 来自用户 WHERE(CustomerNum = @CustomerNum) 按用户名排序
然后我将'UserInfo'设置为下拉列表中的文本字段。
这通常有效,除了偶尔数据库中的一列是null(例如,UserState)。当发生这种情况时,整个串联为空,我在下拉列表中得到一个空条目。
SQLServer中是否存在允许我忽略这些NULL结果的内容,或者我是否必须在DataBind事件中编写代码?
由于
答案 0 :(得分:3)
围绕它合并
COALESCE(UserName,'') + ' - ' +
COALESCE(UserAddress,'') + ',' +
COALESCE(UserCity,'') + ' ' +
COALESCE(UserState,'') AS UserInfo
答案 1 :(得分:2)
对于SQL Server,您有三种选择:
IsNull
类似,但可以使用两个以上的参数。与IsNull
类似,它将返回第一个非null参数,如果全部都是null,则返回null。ON
或OFF
。意思应该是自我解释,但这里是MSDN link。答案 2 :(得分:1)
对于可空列,可以这样做。
ISNULL(UserState, '')
答案 3 :(得分:1)
使用NULL连接有利于您,这将删除不必要的分隔符:
SELECT
UserID, CustomerNum
,ISNULL(UserName+' - ','')
+ISNULL(UserAddress+', ','')
+ISNULL(UserCity+' ','')
+ISNULL(UserState,'') AS UserInfo
FROM Users
WHERE CustomerNum = @CustomerNum
ORDER BY UserName
工作示例:
DECLARE @Users table (userID int, CustomerNum int,UserName varchar(20), UserAddress varchar(20), UserCity varchar(20), UserState varchar(20))
INSERT @Users VALUES (1,111,'Sam','123 First St.', 'city name', 'state name')
INSERT @Users VALUES (2,111,null,'123 First St.', 'city name', 'state name')
INSERT @Users VALUES (3,111,'Sam',null, 'city name', 'state name')
INSERT @Users VALUES (4,111,'Sam','123 First St.', null, 'state name')
INSERT @Users VALUES (5,111,'Sam','123 First St.', 'city name', null)
INSERT @Users VALUES (6,111,null,null, 'city name', 'state name')
SELECT
UserID, CustomerNum
,ISNULL(UserName+' - ','')
+ISNULL(UserAddress+', ','')
+ISNULL(UserCity+' ','')
+ISNULL(UserState,'') AS UserInfo
FROM @Users
--WHERE CustomerNum = @CustomerNum
ORDER BY userID
输出:
UserID CustomerNum UserInfo
----------- ----------- -------------------------------------------
1 111 Sam - 123 First St., city name state name
2 111 123 First St., city name state name
3 111 Sam - city name state name
4 111 Sam - 123 First St., state name
5 111 Sam - 123 First St., city name
6 111 city name state name
(6 row(s) affected)
答案 4 :(得分:0)
你可以这样做:
SELECT UserID, CustomerNum, UserName + ' - ' +
ISNULL(UserAddress + ',','') + ISNULL(UserCity,'') + ' ' + ISNULL(UserState,'')
AS UserInfo
FROM Users
WHERE (CustomerNum = @CustomerNum) ORDER BY UserName
答案 5 :(得分:0)
如果您想忽略空结果(排除它们),您可以将以下内容添加到WHERE
。如果您需要这样做,可以使用ISNULL
或COALESCE
为空列选择空字符串。
...
WHERE UserName is not null
AND UserAddress is not null
AND UserCity is not null
AND UserState is not null