簡體   English   中英

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

[英]Concatenate across columns and rows using group and listagg in Oracle SQL

我有一個像下面這樣的表格,想跨列分組,然后跨行分組。 我有一個解決方案,它有點奏效,但速度很慢。 有沒有更有效的方法來做到這一點?

謝謝

| 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;

謝謝

使用以下查詢,您將直接獲得連接的列值:

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 的保留關鍵字。

干杯!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM