您的代码有效:
--I added this
DECLARE @str varchar(1000)
declare @sometable table (value varchar(50))
insert into @sometable values ('aaaa|bbbb|cccc|dddd')
insert into @sometable values ('1111|2222|3333|4444')
insert into @sometable values ('xx|yy|zz')
--your code unchanged, other than "dbo.sometable" to "@sometable"
SET @str = ''
SELECT @str = @str +
CASE WHEN SUBSTRING(value,CHARINDEX('|',value)+1,LEN(value)) <> '' THEN
'$' +REPLACE(value,'|',' - ')
ELSE
'$' +ISNULL(REPLACE(value,'|',''),'')
END + ', '
FROM @sometable --<<only changed table name
print @str
输出:
$aaaa - bbbb - cccc - dddd, $1111 - 2222 - 3333 - 4444, $xx - yy - zz,
我认为你的连接看起来不错,运行它来检查你的查询不只是错误:
SELECT value
FROM dbo.sometable
如果您在实际查询中有更多详细信息,您可能有一个不好的where 或加入。
---- 编辑----
此外,以这种方式连接时,您不能在查询中使用 ORDER BY。 如果您需要与 order by 连接,您可以使用类似这样的内容:
set nocount on;
declare @YourTable table (RowID int, HeaderValue int, ChildValue varchar(5))
insert into @YourTable VALUES (4,3,'<br>')
insert into @YourTable VALUES (1,1,'CCC')
insert into @YourTable VALUES (3,2,'AAA')
insert into @YourTable VALUES (5,3,'A & Z')
insert into @YourTable VALUES (2,2,'B<&>B')
set nocount off
SELECT
t1.HeaderValue
,STUFF(
(SELECT
', ' + t2.ChildValue
FROM @YourTable t2
WHERE t1.HeaderValue=t2.HeaderValue
ORDER BY t2.ChildValue --<<<<<<<<<<<<ORDER BY
FOR XML PATH(''), TYPE
).value('.','varchar(max)')
,1,2, ''
) AS ChildValues
FROM @YourTable t1
GROUP BY t1.HeaderValue
输出:
HeaderValue ChildValues
----------- ---------------
1 CCC
2 AAA, B<&>B
3 <br>, A & Z
(3 row(s) affected)
这是您的代码的一个工作示例:
DECLARE @str varchar(1000)
declare @sometable table (value varchar(50))
insert into @sometable values ('aaaa|bbbb|cccc|dddd')
insert into @sometable values ('1111|2222|3333|4444')
insert into @sometable values ('xx|yy|zz')
--your code unchanged, other than "dbo.sometable" to "@sometable"
SET @str = ''
SELECT @str = @str + STUFF(
(SELECT ', ' +
CASE WHEN SUBSTRING(value,CHARINDEX('|',value)+1,LEN(value)) <> '' THEN
'$' +REPLACE(value,'|',' - ')
ELSE
'$' +ISNULL(REPLACE(value,'|',''),'')
END
FROM @sometable t2
ORDER BY t2.value --<<<<<<<<<<<<ORDER BY
FOR XML PATH(''), TYPE
).value('.','varchar(max)')
,1,2, ''
)
print @str
输出:
$1111 - 2222 - 3333 - 4444, $aaaa - bbbb - cccc - dddd, $xx - yy - zz