我遇到以下问题。
我的示例数据如下:
03D
03F
03G
03H
03I
04E
05D
05G
05H
06C
08D
08D (BEST)
08E
08E (BEST)
08F
08F (BEST)
08G
08G (BEST)
08H
08H (BEST)
08I
08I (BEST)
08J
08K
08k08K
08L
08L (BEST)
我需要将此数据合并为一个字符串,如下所示:
03D;03F;03G;03H;03I;04E;05D;05G;05H;06C;08D;08D (BEST);08E;08E (BEST);08F;08F (BEST);08G;08G (BEST);08H;08H (BEST);08I;08I (BEST);08J;08K;08k08K;08L;08L (BEST);
请注意,此表中始终会添加数据,因此,我需要准确地运行该数据,以使用此结果更新单个字段。
应使用此运算符;
我试图实现的脚本是:
declare @loop int
, @Tempid int
, @lookup varchar(max)
declare @bin table
(id int identity primary key, bin varchar(100))
insert into @bin (bin)
select distinct
cBinLocationName
from _btblBinLocation
set @lookup = ''
begin
select @Loop = min(ID) FROM @bin
while @Loop IS NOT NULL
begin
set @Tempid = (select id from @bin where id=@Loop)
set @lookup = @lookup + (select bin FROM @bin where ID=@Tempid)+';'
select @Loop = min(ID) FROM @bin where ID>@Loop
end
end
select @lookup
问题是,我的结果一直是''
。
请帮助?
答案 0 :(得分:0)
我通过导航到Larnu在评论中发布的链接来解决它。
我更改了答案以适合我,以下是脚本:
select top 1 stuff((select distinct cBinLocationName + ';'
from _btblBINLocation
for xml path('')), 1, 1, '') as lookup
from _btblBINLocation
这正是我想要的。有了这些结果,我将能够基于此更新字段。
谢谢大家。
结果如下:
答案 1 :(得分:0)
这是一个简单的示例,不需要XML和STUFF:
DECLARE @TestData TABLE
(
[TestData] NVARCHAR(200)
);
DECLARE @Del CHAR(1) = ';';
DECLARE @Lookup NVARCHAR(MAX) = '';
INSERT INTO @TestData (
[TestData]
)
VALUES ( '03D' )
, ( '03F' )
, ( '03G' )
, ( '03H' )
, ( '03I' )
, ( '04E' )
, ( '05D' )
, ( '05G' )
, ( '05H' )
, ( '06C' )
, ( '08D' )
, ( '08D (BEST)' )
, ( '08E' )
, ( '08E (BEST)' )
, ( '08F' )
, ( '08F (BEST)' )
, ( '08G' )
, ( '08G (BEST)' )
, ( '08H' )
, ( '08H (BEST)' )
, ( '08I' )
, ( '08I (BEST)' )
, ( '08J' )
, ( '08K' )
, ( '08k08K' )
, ( '08L' )
, ( '08L (BEST)' );
--puts the result set into @Lookup
SELECT @Lookup = @Lookup + [TestData] + @Del
FROM @TestData;
--Remove the trailing delimiter
SET @Lookup = SUBSTRING(@Lookup, 1, LEN(@Lookup) - 1);
SELECT @Lookup;