SQL SERVER 将多行多列组合成单行单列

SQL SERVER Combine multiple rows with multiple columns into single row with single column

好的,伙计们,这几天让我翻白眼了。假设我有两个表(或更多)如下所示。

表 1

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

表 2

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

并且我想将这些表中具有相同 ID 的每一行的多个列组合成 A SINGLE ROWSINGLE COLUMN像下面。每个新的 "row" 将与前一个用 ';' 分开。

查询结果

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

你会怎么做?我在 FOR XML PATH 上找到了例子,但只有当有多行有两列并组合在不同的行上时。

以下是您的数据示例:

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;