表:我在SQL Server 2012中有一个数据库表table_1,其数据为:
CREATE TABLE table_1
(
name nvarchar(128) not null,
state tinyint null,
state_desc nvarchar(60) null
);
INSERT INTO table_1
VALUES ('text1',1,'ONLINE'),
('text2',0,'ONLINE'),
('text3',0,'ONLINE'),
('text4',0,'ONLINE'),
('TEXTTE',0,'ONLINE'),
('TEXTTEXT',0,'ONLINE'),
('EXTTEXT',0,'ONLINE'),
('TEXTex_EX_Ext',0,'ONLINE'),
('TEXTex_TEX_Ext',0,'ONLINE'),
('TEXTTEXTText',0,'ONLINE'),
('Texttextext',0,'ONLINE'),
('TextTextext',0,'ONLINE'),
('TEXTER',1,'ONLINE');
我想选择列状态中的所有值并将它们连接起来以获得单个字符串。
所需结果是单行和单列,数据为:
1000000000001
我尝试了什么:使用子字符串,但它跳过第一行(1)并提供13行(每行000000000001)而不是1行。
Select
substring(
(
Select ''+ST1.[state] AS [text()]
From dbo.table_1 ST1
For XML PATH ('')
), 2, 1000) [state]
From dbo.table_1 ST2;
还有其他办法吗?
我不知道行数,我想在连接时保持序列。 (第一行应为第一位,第二行为第二位,等等)
连接后第一行是最右边还是最左边并不重要,只需要保持一致并按顺序排列。
答案 0 :(得分:1)
尝试使用变量 看到这个
declare @Str varchar(1000)
set @Str = ''
update table_1
set @Str = @Str + cast(state as varchar)
select @Str
答案 1 :(得分:1)
- 尝试此查询
SELECT replace([state],',','')
FROM(
SELECT stuff( (SELECT ',' + CONVERT(VARCHAR(1000), ST1.[state])
FROM table_1 ST1
FOR XML PATH(''), TYPE).value('.', 'varchar(max)')
,1,1,'')
AS [state]
)t
答案 2 :(得分:1)
您的查询几乎正确无误。您只需要substring
部分。另外,我建议您在与for xml path
连接时订购行。你有一些ID栏吗?我稍微修改了你的查询:
select result = (
Select ''+ST1.[state] AS [text()]
From dbo.table_1 ST1
For XML PATH ('')
)