在一列中使用逗号分隔输出的子查询

时间:2013-02-15 21:50:00

标签: sql sql-server-2008

我需要帮助编写查询,其中查询输出显示带有逗号分隔数据的列。

我有两张一对多的关系表。我想编写一个查询,从一个记录中输出表中的所有记录,但在具有许多记录的表中的一列中显示逗号分隔的数据。

表1

Col1 Col2 Col3
a1     1   4
a2     2   5
a3     3   6
a4     7   8

表2

Col1 Col4
a1     10
a1     11
a1     22
a2     10
a2     11
a3     19
a3     22
a3     23
a4     15

查询输出:

Col1 Col2 Col3 Col4
a1     1   4    10,11,22
a2     2   5    10,11
a3     3   6    19,22,23
a4     7   8    15

提前致谢

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

select t1.col1,
  t1.col2, 
  t1.col3,
  left(t2.col4, len(t2.col4)-1) col4
from table1 t1
cross apply
(
  select cast(t2.Col4 as varchar(10)) + ', '
  from Table2 t2
  where t1.col1 = t2.col1
  FOR XML PATH('')
) t2 (col4)

请参阅SQL Fiddle with Demo

或者您可以使用:

select t1.col1,
  t1.col2, 
  t1.col3,
  STUFF(
         (SELECT ', ' + cast(t2.Col4 as varchar(10))
          FROM Table2 t2
          where t1.col1 = t2.col1
          FOR XML PATH (''))
          , 1, 1, '')  AS col4
from table1 t1

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

SELECT  Col1, 
        Col2, 
        Col3,
        Col4 = SUBSTRING((
                            SELECT ',' + af.awardFocusName
                              FROM Table2 t2    
                             WHERE t2.Col1 = t1.Col1
                            FOR XML PATH('')
                        ), 2, 1000000)
  FROM  Table1 t1