Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将多行连接成一个字符串_Sql Server - Fatal编程技术网

Sql server 将多行连接成一个字符串

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个名称 我真正需要做的是旋转第二列。我使用了

我使用的是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个名称

我真正需要做的是旋转第二列。我使用了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,如果答案对你有帮助,请随意投票,如果它解决了你的问题,请接受它。这有助于其他人了解哪些答案可能有帮助,以及是否有任何答案解决了您的问题。这也增加了你的声誉。