如何连接单个int列的所有行以获取单个字符串?

时间:2018-04-10 22:41:16

标签: sql sql-server-2012

表:我在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;

还有其他办法吗?

我不知道行数,我想在连接时保持序列。 (第一行应为第一位,第二行为第二位,等等)

连接后第一行是最右边还是最左边并不重要,只需要保持一致并按顺序排列。

3 个答案:

答案 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 ('')
)