Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle SQL中使用group和listagg跨列和行连接_Sql_Oracle_Listagg - Fatal编程技术网

在Oracle SQL中使用group和listagg跨列和行连接

在Oracle SQL中使用group和listagg跨列和行连接,sql,oracle,listagg,Sql,Oracle,Listagg,我有一个如下所示的表,我想先跨列分组,然后跨行分组。 我有一个解决方案,有点可行,但速度很慢。有没有更有效的方法 多谢各位 | GROUP | VAL 1 | VAL 2 | VAL 3 | | A | 1 | 2 | 3 | | A | 4 | 5 | 6 | | B | 7 | 8 | 9 | | C | 10 | 11 | 12 | 首选结果是 | GROUP |

我有一个如下所示的表,我想先跨列分组,然后跨行分组。 我有一个解决方案,有点可行,但速度很慢。有没有更有效的方法

多谢各位

| GROUP | VAL 1 | VAL 2 | VAL 3 | 
|   A   |   1   |    2  |   3   |
|   A   |   4   |   5   |  6    | 
|   B   |   7   |   8   |   9   |
|   C   |   10  |   11  |   12  |
首选结果是

| GROUP | TEXT |
|   A   |123456|
|   B   | 789  |
|   C   |101112|
这是我目前拥有的,但速度很慢。是否有跨列和跨行分组的替代解决方案

    select GROUP,
    listagg(comments,',')
    within GROUP (order by GROUP) "TEXT"
    from
    (select concat(val 1,concat(val 2,val 3)) as Comments, data.* 
    from data)
    group by GROUP;

谢谢

使用以下查询,您将直接获得连接的列值:

| GROUP | VAL 1 | VAL 2 | VAL 3 | 
|   A   |   1   |    2  |   3   |
|   A   |   4   |   5   |  6    | 
|   B   |   7   |   8   |   9   |
|   C   |   10  |   11  |   12  |
SELECT
    "GROUP",
    LISTAGG(VAL_1 || VAL_2 || VAL_3)  
        WITHIN GROUP(ORDER BY VAL_1) AS "TEXT"
FROM DATA
GROUP BY "GROUP";
注意:请勿将oracle保留关键字用作列名。此处
GROUP
是oracle保留的关键字


干杯

@glencloncurry。尽管此查询肯定是对查询的简化,但它应该具有与查询相同的性能。我理解这个问题是希望提高绩效。