SQL语句,让我输出多列作为一个行

问题描述:

我的表在我的数据库是这样的:SQL语句,让我输出多列作为一个行

 
ID | VARIANT | SIFRANT | VALUE 

当我打电话

SELECT * FROM example_table 

我得到了自己的每一行。但是我的数据库中的记录可以有相同的VARIANT。我想将这些记录输出到同一行。 例如,如果我有

 
ID | VARIANT | SIFRANT | VALUE 
1 | 3  | 5  | 50 
2 | 3  | 6  | 49 
3 | 3  | 1  | 68 

我想输出是

 
VARIANT | VALUES_5 | VALUES_6 | VALUES_1 
3  | 50  | 49  | 68 

编辑:我找到了解决办法使用PIVOT,代码是这样的:

select * 
from (
    select variant, VALUE, SIFRANT 
    from example_table 
) 
pivot 
(
    max(VALUE) 
    for SIFRANT 
    in ('1','2','3','4','5','6','7','8','9','10') 
) 
+0

这个术语的总称称为组连接 - 至少由MySQL的GROUP_CONTACT()函数进行......我并没有真正使用Oracle,所以不确定equiv(在SQL Server中,这必须通过自定义逻辑来处理,没有任何东西内置的,但该术语可能会给你至少一些方向) – jleach

+0

看到这里:http://*.com/questions/16771086/is-there-any-function-in-oracle-similar-to-group-concat-在MySQL的 – jleach

看起来你只需要对你的数据进行汇总:

with test(ID, VARIANT, SIFRANT, VALUE) as 
(
    select 1, 3, 5, 50 from dual union all 
    select 2, 3, 6, 49 from dual union all 
    select 3, 3, 1, 68 from dual 
) 
select variant, listagg (value, ' ') within group (order by id) 
from test 
group by variant