如何将多行连接到varchar有很多问题,但是你可以将一行中的所有单元连接成一个varchar吗?
示例:包含3列的表
| Id | FirstName | LastName |
| 1 | John | Doe |
| 2 | Erik | Foo |
返回以下内容
"1, John, Doe"
"2, Erik, Foo"
你知道你在做什么表。
注1:假设您在编写查询时不知道列的名称
注2:我想避免使用动态SQL(如果可能)
答案 0 :(得分:1)
我唯一想到的是设置nocount以使用这些参数将结果输出到文本而不是网格。这可以在不知道列数量和避免动态SQL的情况下完成。
SET NOCOUNT ON;
;WITH Test (Id, FirstName, LastName)
AS (
SELECT 1, 'John', 'Doe'
UNION ALL
SELECT 2, 'Erik', 'Foo'
)
SELECT *
FROM Test
会回复你:
1,John,Doe
2,Erik,Foo
答案 1 :(得分:1)
以下是此版本的基本版本。当列未知时将其转换为动态sql解决方案将非常棘手。您将需要使用sql动态生成类似于此的查询。任何没有主键或唯一索引的表几乎是不可能的,因为您不知道要用作哪个列作为您的组。它也变得更加棘手,因为你不知道你正在使用什么数据类型。您还需要确保添加一些逻辑来处理单引号和NULL。这肯定是一个有趣的挑战。如果我这个周末有时间,我可能会尝试为此动态版本做些什么。
with Something(Id, FirstName, LastName) as
(
select 1, 'John', 'Doe' union all
select 2, 'Erik', 'Foo'
)
select STUFF((select cast(s2.Id as varchar(5)) + ', ' + s2.FirstName + ', ' + s2.LastName
from Something s2
where s2.Id = s.Id
for xml path('')), 1, 0, '') as Stuffed
from Something s
group by Id