将数据行到列

use*_*594 2 sql sql-server

我有sql查询来获取文件的位置

select FileName, FileLocation from tblFile
Run Code Online (Sandbox Code Playgroud)

和数据一样

FileName               FileLocation

file1                  \\server1\folder1\file1
file1                  \\server2\folder1\file1
file2                  \\server1\folder1\file2
file2                  \\server2\folder1\file2
Run Code Online (Sandbox Code Playgroud)

我想获得如下数据:

FileName               FileLocations

file1                  \\server1\folder1\file1, \\server2\folder1\file1
file2                  \\server1\folder1\file2, \\server2\folder1\file2
Run Code Online (Sandbox Code Playgroud)

如何在sql server中获得以上结果?

Mik*_*son 5

SQL小提琴

MS SQL Server 2008架构设置:

create table tblFile
(
  FileName varchar(10),
  FileLocation varchar(30)
)

insert into tblFile values
('file1',                  '\\server1\folder1\file1'),
('file1',                  '\\server2\folder1\file1'),
('file2',                  '\\server1\folder1\file2'),
('file2',                  '\\server2\folder1\file2')
Run Code Online (Sandbox Code Playgroud)

查询1:

select T1.FileName,
       (
       select ', '+T2.FileLocation
       from tblFile as T2
       where T1.FileName = T2.FileName
       for xml path(''), type
       ).value('substring(text()[1], 3)', 'varchar(max)') as FileLocations
from tblFile as T1
group by T1.FileName
Run Code Online (Sandbox Code Playgroud)

结果:

| FILENAME |                                    FILELOCATIONS |
---------------------------------------------------------------
|    file1 | \\server1\folder1\file1, \\server2\folder1\file1 |
|    file2 | \\server1\folder1\file2, \\server2\folder1\file2 |
Run Code Online (Sandbox Code Playgroud)