T-SQL - 如何选择不同的行并将一行移动到列

时间:2015-09-15 15:45:48

标签: sql sql-server tsql

我需要查询一个表才能返回行,但是我无法正确查询表。这是我的表格视图:

Base    Altezza Materiale
10      10      Ferro
10      10      Legno
10      30      Ferro
10      30      Legno
10      30      Acciaio
20      20      Legno

结果集应返回:

Base    Altezza Materiale
10      10      Ferro, Legno
10      30      Ferro, Legno, Acciaio
20      20      Legno

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

使用Stuff功能与XML Path连接行:

创建样本表:

create table mytable (Base int, Altezza int,  Materiale varchar(50));

insert into mytable values
(10, 10, 'Ferro'),
(10, 10, 'Legno'),
(10, 30, 'Ferro'),
(10, 30, 'Legno'),
(10, 30, 'Acciaio'),
(20, 20, 'Legno');

<强>查询:

select distinct base,
       altezza,     
       STUFF((Select ','+ materiale
               from mytable T1
             where T1.base=T2.base
               and t1.altezza = t2.altezza
             FOR XML PATH('')),1,1,'') as Materiale
from mytable T2;

<强>结果:

+------+---------+---------------------+
| base | altezza |      Materiale      |
+------+---------+---------------------+
|   10 |      10 | Ferro,Legno         |
|   10 |      30 | Ferro,Legno,Acciaio |
|   20 |      20 | Legno               |
+------+---------+---------------------+

SQL Fiddle Demo