如何水平(连续)显示列值,并在其周围显示一些文本?

时间:2018-06-12 14:04:38

标签: sql-server-2008

如果我的列“Col1”的值为1,2,3

col1
****
1
2
3

如何水平显示它们?喜欢

col1 1,2,3

或者如果可能的话,还有一些像

这样的文字
**'values for col1 are' 1,2,3**

任何建议都将不胜感激:)

1 个答案:

答案 0 :(得分:2)

要回答您的具体问题,您可以使用for xml和一些小技巧来实现这一目标:

declare @t table(Col1 int);
insert into @t values(1),(2),(3);

select 'Values for Col1 are '
        + stuff((select ', ' + cast(Col1 as varchar(5))
                from @t
                for xml path('')
                ),1,2,'');

这可以通过将每个行值连接成一个非常小的xml字符串,只有逗号和空格来分隔每个值。然后使用stuff函数删除第一个逗号和空格。

在这种情况下,输出为:Values for Col1 are 1, 2, 3

如果您有一个要将输出分组的列,可以将其添加到上面的脚本中:

declare @t table(Id int, Val int);
insert into @t values(1,1),(1,2),(1,3),(2,4),(2,2);

with Ids as
(
    select distinct Id
    from @t
)
select 'Values for ID ' + cast(Ids.Id as varchar(5)) + ' are '
        + stuff((select ', ' + cast(t.Val as varchar(5))
                from @t as t
                where Ids.Id = t.Id
                for xml path('')
                ),1,2,'') as Vals
from Ids
order by IDs.Id;

哪个输出:

+-----------------------------+
|             Vals            |
+-----------------------------+
| Values for ID 1 are 1, 2, 3 |
| Values for ID 2 are 4, 2    |
+-----------------------------+