将两行数据显示为一行

Showing the data of two rows into one row

我有一个 table 数据为

-----------------------------------------------------------------------------
CUSTOMER    CSAC        CIRCUIT              VALUE       TOWN       POST_CODE
-----------------------------------------------------------------------------
    RCE |   CSAC125896 |    ICUK809605 |    100 MBPS |  BASILDON |  SS15 5FS
    RCE |   CSAC125896 |    ICUK809605 |    100 MBPS |  BASILDON |  SS15 6AA

如果 csac 值与此相同,我希望第二个 post 代码也显示在同一行中

-----------------------------------------------------------------------------
CUSTOMER  CSAC   CIRCUIT    VALUE        TOWN       POST_CODE   POST_CODE2
-----------------------------------------------------------------------------
RCE|CSAC125896 |ICUK809605 |100 MBPS |  BASILDON |  SS15 5FS |  SS15 6AA

我怎样才能达到这个结果。我试过使用转置,但没有得到想要的结果。

假设您可以有超过两行具有相同的字段值,但不同 POST_CODE,您无法预先知道您的查询需要的列数 return。

使用稍微不同的方法,您可以尝试:

select CUSTOMER, CSAC, CIRCUIT, VALUE, TOWN,
       listagg(POST_CODE, ', ') within group (order by post_code)
from your_table
group by CUSTOMER, CSAC, CIRCUIT, VALUE, TOWN
SELECT CUSTOMER,
       CSAC,
       CIRCUIT,
       VALUE,
       TOWN,
       MAX( CASE RN WHEN 1 THEN POST_CODE END ) AS POST_CODE_1,
       MAX( CASE RN WHEN 2 THEN POST_CODE END ) AS POST_CODE_2
FROM   (
  SELECT  t.*,
          ROW_NUMBER() OVER (
            PARTITION BY CUSTOMER, CSAC, CIRCUIT, VALUE, TOWN
            ORDER BY POST_CODE
          ) AS RN
  FROM    table_name t
)
GROUP BY  CUSTOMER,
          CSAC,
          CIRCUIT,
          VALUE,
          TOWN;

输出:

CUSTOMER CSAC       CIRCUIT    VALUE    TOWN     POST_CODE_1 POST_CODE_2
-------- ---------- ---------- -------- -------- ----------- -----------
RCE      CSAC125896 ICUK809605 100 MBPS BASILDON SS15 5FS    SS15 6AA