Sql 具有空值的Concat
我有一个类似这样的查询:Sql 具有空值的Concat,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个类似这样的查询: select distinct col1, ( select ltrim(str(col2))+',' from @temp t2 where t2.col1 = t1.col1 for xml path('') ) col2 from @temp t1 col2中的一些值为null,因此不显示带有null的字符串,而是完全缺少该部分,即 col2应该有 3,4,3,NULL,2,3,4,3,2, 但我得到的却是: 3,4,3,2,3
select distinct col1,
(
select ltrim(str(col2))+','
from @temp t2
where t2.col1 = t1.col1
for xml path('')
) col2
from @temp t1
col2中的一些值为null,因此不显示带有null的字符串,而是完全缺少该部分,即
col2应该有
3,4,3,NULL,2,3,4,3,2,
但我得到的却是:
3,4,3,2,3,4,3,2,
如何更正此问题?尝试以下方法:
SELECT DISTINCT col1,
(
SELECT ISNULL(CAST(col2 AS VARCHAR(10)),'NULL') + ','
FROM @Temp AS T2
WHERE T2.col1 = T1.col1
FOR XML PATH('')
) AS col2
FROM @Temp AS T1
将任何值添加到NULL将导致NULL
任意值+NULL=NULL
NULL值不是字符串NULL。这只是缺乏信息。您可以做的是强制将NULL值视为字符串NULL,如下所示:
SELECT CASE
WHEN col2 IS NULL THEN 'NULL'
ELSE col2
END + ','
SELECT CASE
WHEN col2 IS NULL THEN 'NULL'
ELSE CAST(col2 AS VARCHAR(5))
END + ','
为了使它更简洁,您可以使用isnull(col2,'NULL')
或coalesce(col2,'NULL')
如果col2
不是文本类型,请先强制转换它,然后再使用上述任何解决方案,如:
SELECT CASE
WHEN col2 IS NULL THEN 'NULL'
ELSE col2
END + ','
SELECT CASE
WHEN col2 IS NULL THEN 'NULL'
ELSE CAST(col2 AS VARCHAR(5))
END + ','
要获得空输出,需要将空值更改为字符串“NULL”。这也意味着您需要将数值转换为字符串,以使字段具有一致的类型
SELECT DISTINCT col1,
(
SELECT COALESCE(CAST(col2 AS VARCHAR),'NULL')+','
FROM @temp t2
WHERE t2.col1 = t1.col1
FOR XML PATH('')
) col2
FROM @temp t1
.这应该行得通。希望能有所帮助
DECLARE @temp TABLE (col1 INT,col2 INT)
INSERT INTO @temp (col1,col2)
VALUES (1, 2),
(1, 3),
(1, 4),
(1, NULL),
(1, 6),
(1, 7)
SELECT DISTINCT col1,
SUBSTRING((
SELECT ','+LTRIM(ISNULL(STR(col2),'NULL'))
FROM @temp AS t2
WHERE t2.col1 = t1.col1
FOR XML PATH('')
),2,200000) AS col2
FROM @temp AS t1
你能发布一个可执行的复制吗?出于测试目的,将子查询替换为常量NULL。@不幸的是,usr对我来说是新的可执行程序。不知道这是什么意思。发布一个任何人都可以执行的查询以查看错误的结果。@oshirowanen:为了方便起见,我发布了一个复制语句示例。