Sql server 将多行连接成一个字符串
我使用的是SQL Server 2008 R2 Enterprise 64位 我的问题是: 我有两个表t1和t2,一个是Id列,另一个是name列 我可以查询它们,以便得到以下结果:Sql server 将多行连接成一个字符串,sql-server,Sql Server,我使用的是SQL Server 2008 R2 Enterprise 64位 我的问题是: 我有两个表t1和t2,一个是Id列,另一个是name列 我可以查询它们,以便得到以下结果: ID Name 1 bob 1 ted 2 bill 3 frank 我想要的结果如下所示: ID name 1 bob ted 2 bill 3 frank “名称”列可以有1到n个名称 我真正需要做的是旋转第二列。我使用了
ID Name
1 bob
1 ted
2 bill
3 frank
我想要的结果如下所示:
ID name
1 bob ted
2 bill
3 frank
“名称”列可以有1到n个名称
我真正需要做的是旋转第二列。我使用了xml和stuff函数的cast,但这些函数并不能满足我的需要
我试图编写一个pivot函数,但收到一条错误消息
SELECT ID, name As name
FROM
(SELECT ID, name
FROM dbo.t1 AS t1
INNER JOIN
dbo.t2 AS t2 ON t1.ID = t2.ID
WHERE (some filter)
AS s
PIVOT
(
max(name)
FOR
[name]
IN ( [name]
)) AS p
提前感谢:一种方法是,您可以通过子查询将第二个表连接到FOR XML PATH
DECLARE @t1 TABLE (ID INT)
INSERT @t1 VALUES (1),(2),(3)
DECLARE @t2 TABLE (ID INT, Name VARCHAR(50))
INSERT @t2 VALUES (1,'bob'),(1,'ted'),(2,'bill'),(3,'frank')
SELECT
T1.ID,
LTRIM((SELECT ' ' + Name AS [text()] FROM @t2 WHERE ID = T1.ID FOR XML PATH(''))) AS name
FROM @t1 T1
-- WHERE (filter here)
以下是样本的结果:
ID name
----------- --------------------
1 bob ted
2 bill
3 frank
一种方法是,可以通过子查询将第二个表连接到FOR XML PATH
DECLARE @t1 TABLE (ID INT)
INSERT @t1 VALUES (1),(2),(3)
DECLARE @t2 TABLE (ID INT, Name VARCHAR(50))
INSERT @t2 VALUES (1,'bob'),(1,'ted'),(2,'bill'),(3,'frank')
SELECT
T1.ID,
LTRIM((SELECT ' ' + Name AS [text()] FROM @t2 WHERE ID = T1.ID FOR XML PATH(''))) AS name
FROM @t1 T1
-- WHERE (filter here)
以下是样本的结果:
ID name
----------- --------------------
1 bob ted
2 bill
3 frank
也许你可以为你的问题想出一个更好的标题……你的标题已经在谷歌上作为搜索结果提供了。你真的想让人们找到他们共同问题的答案吗:嗨,我在使用MSSQL server 2008 R2 enterprise 64位?为什么要使用pivot使用XML PATHdeclare@t table ID INT,Name VARCHAR10 INSERT到@t ID,namevalues 1,'bob',1,'ted',2,'bill',3,'frank'select ID,stuff select','+[Name]from@t where ID=t.ID作为XML路径,1,1,从@t t选择不同的ID,你可以为你的问题找到一个更好的标题……你的标题已经在谷歌上作为搜索结果提供了。你真的想让人们找到他们共同问题的答案吗:嗨,我在使用MSSQL server 2008 R2 enterprise 64位?为什么要使用pivot使用XML PATHdeclare@t table ID INT,Name VARCHAR10 INSERT到@t ID,namevalues 1,'bob',1,'ted',2,'bill',3,'frank'select ID,stuff select','+[Name]from@t where ID=t.ID作为XML路径,1,1,从@t中选择不同的IDt@craigrobinson,如果答案对你有帮助,请随时投票,如果答案解决了你的问题,请接受。这有助于其他人了解哪些答案可能有帮助,以及是否有任何答案解决了您的问题。这也会增加你的声誉。@craigrobinson,如果答案对你有帮助,请随意投票,如果它解决了你的问题,请接受它。这有助于其他人了解哪些答案可能有帮助,以及是否有任何答案解决了您的问题。这也增加了你的声誉。