SQL SERVER将具有多列的多行合并为具有单列的单行

时间:2018-06-25 10:56:50

标签: sql sql-server for-xml-path

好吧,这让我转动了几天。假设我有两个如下的表(或更多表)。

TABLE1

ID  | NAME      | DATE          | MORE COLS....
1   | MARK      | 2018-31-10    | ....
2   | JOHN      | 2018-29-10    | ....
...

TABLE2

FK_TBL1_ID | Data1     | Data2     | 
1          | 11111     | 33333     | 
1          | 22222     | 44444     | 
2          | 12345     | 67899     | 
...

我想将具有这些表的相同ID的每一行的多列合并为如下所示的单行单列。每个新的“行”都将以“;”与前一个行分开。

查询结果

ID  | NAME      | DATE          |       Data1Data2        | 
1   | MARK      | 2018-31-10    |  1111 3333; 2222 4444;  | 
2   | JOHN      | 2018-29-10    |  12345 67899            | 

您将如何去做?我在FOR XML PATH上找到了示例,但仅当多行包含两列并组合在不同行上时。

1 个答案:

答案 0 :(得分:3)

以下是您的数据示例:

select t1.*,
       stuff( (select '; ' + coalesce(data1, '') + ' ' + coalesce(data2, '')
               from table2 t2
               where t2.FK_TBL1_ID = t1.id
               for xml path ('')
              ), 1, 2, ''
            ) as Data1Data2
from table1 t1;