如果我的列“Col1”的值为1,2,3
col1
****
1
2
3
如何水平显示它们?喜欢
col1 1,2,3
或者如果可能的话,还有一些像
这样的文字**'values for col1 are' 1,2,3**
任何建议都将不胜感激:)
答案 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 |
+-----------------------------+