暴难的字符串拼接问题(不可以用临时表 及 游标)
现在有表:
FieldValue ConcatenationOrder
-------------------------
TH NULL
LF NULL
1N4148-TAP NULL
1 1
VF 1
0.3 2
A 2
80 4
VBR 4
DO35 NULL
****************************************************************
需要拼接字符串结果如下:
------------------------------------------------
TH,LF,1N4148-TAP,1VF,0.3A,80VBR,DO35
****************************************************************
规则:
如果ConcatenationOrder字段为NULL,用逗号(,)格开,如果不为null,字符直接连接,但不同的ConcatenationOrder字段,其FieldValue需用逗号(,)格开。
不可以用临时表,不可以用游标。其他应该都可以使用。
****************************************************************
现在有一个比较接近的语句可以参考,或者推翻重新写也可以。
declare @str varchar(8000)
set @str= ' '
select @str=@str+ ', ' +cast(FieldValue as varchar) from
(
select * from testtable
) x
set @str=right(@str,len(@str)-1)
select @str
****************************************************************
表结构数据提供:
if exists (select * from dbo.sysobjects where id = object_id(N '[TestTable] ') and OBJECTPROPERTY(id, N 'IsUserTable ') = 1)
drop table [TestTable]
GO
create table TestTable(
FieldValue varchar(80),
ConcatenationOrder int
)
GO
insert into TestTable
select 'TH ',NULL
union select 'LF ', NULL
union select '1N4148-TAP ',NULL
union select '1 ',1
union select 'VF ',1
union select '0.3 ',2
union select 'A ',2
union select '80 ',4
union select 'VBR ',4
union select 'DO35 ',NULL
Go
select * from testtable
GO
------解决方案-------------------- SELECT
FieldValue = REPLACE(re.value( '(/r)[1] ', 'nvarchar(max) '), N ' , ', N ' ')
FROM(
SELECT re = (
SELECT *
FROM(
SELECT FieldValue
FROM testtable
WHERE ConcatenationOrder IS NULL
UNION ALL