Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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 使用XML路径连接多个字段_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 使用XML路径连接多个字段

Sql 使用XML路径连接多个字段,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我在实现连接多行的XML路径方法时遇到了一些问题。因此,给出下表,测试 ID Type 1 boy 2 boy 3 boy 1 girl 2 girl 3 man 3 woman 查询是: SELECT DISTINCT a.ID, ( SELECT b.Type + ',' FROM Test as b WHERE a.Type = b.Type for XML PATH ('')

我在实现连接多行的XML路径方法时遇到了一些问题。因此,给出下表,测试

ID  Type  
 1  boy
 2  boy
 3  boy
 1  girl
 2  girl
 3  man
 3  woman
查询是:

SELECT DISTINCT a.ID,
    (
        SELECT  b.Type + ','
        FROM Test as b
        WHERE a.Type = b.Type
        for XML PATH ('')
    )
FROM Test as a
但不是返回:

ID  Type  
 1  boy,girl,man,
 2  boy,girl,
 3  boy,girl,woman
而是返回以下内容:

ID  Type
 1  boy,boy,boy,
 1  girl,girl,
 2  boy,boy,boy,
 2  girl,girl,
 3  boy,boy,boy,
 3  man,
 3  woman,

发生了什么事?

你加入的场地不对

试一试


与其使用DISTINCT,不如使用
groupby
类似的方法

SELECT  a.ID,

   STUFF((SELECT  ', ' +  [Type] [text()]
          FROM Test 
          WHERE ID = a.[ID]
          for XML PATH (''),TYPE).
          value('.','NVARCHAR(MAX)'),1,2,'') AS [Type]

FROM Test as a
GROUP BY a.ID

真的!谢谢。@lunarplasma是的,当然使用group by而不是DISTINCT可以提供更好的性能。
SELECT  a.ID,

   STUFF((SELECT  ', ' +  [Type] [text()]
          FROM Test 
          WHERE ID = a.[ID]
          for XML PATH (''),TYPE).
          value('.','NVARCHAR(MAX)'),1,2,'') AS [Type]

FROM Test as a
GROUP BY a.ID