在 SQL 列中添加查询结果

Add query results in columns SQL

我有这个(我的查询结果):

    id |  suk | xpto
   ----+------+------
     4 | 1023 | abc
     4 | 1025 | def
     4 | 1200 | zzz
     4 | 1501 | ppp
     5 | 1111 | ola
     5 | 2222 | xau

我需要在

中进行转换
    id |   suk    |    suk2  |   suk3   | suk4 
  -----+----------+----------+----------+-----------
     4 | 1023 abc | 1025 def | 1200 zzz | 1501 ppp
     5 | 1111 ola | 2222 xau |          |

实际上,我的查询是:

SELECT b.ID, s.SKU, s.EVENT_TYPE 
FROM VFIE_BONUS_POINTS_RULE b 
INNER JOIN VFIE_BONUS_POINTS_RULE_SKU s  
ON b.ID = s.ID_BNS_PTS_RL; 

我使用 Oracle。

可能吗?

使用 pivotrow_number()。而不是 t 提出您的查询:

select * 
  from (select row_number() over (partition by id order by suk) rn, t.* from t)
  pivot (max(suk||' '||xpto) suk for rn in (1, 2, 3, 4))

测试:

with t(id, suk, xpto) as (select 4, 1023, 'abc' from dual
                union all select 4, 1025, 'def' from dual
                union all select 4, 1200, 'zzz' from dual
                union all select 4, 1501, 'ppp' from dual
                union all select 5, 1111, 'ola' from dual
                union all select 5, 2222, 'xau' from dual )
select * 
  from (select row_number() over (partition by id order by suk) rn, t.* from t)
  pivot (max(suk||' '||xpto) suk for rn in (1, 2, 3, 4))

输出:

ID  1_SUK     2_SUK     3_SUK     4_SUK
--  --------  --------  --------  --------
 4  1023 abc  1025 def  1200 zzz  1501 ppp
 5  1111 ola  2222 xau

编辑:

How can I change column name of the sku and xpto? Expected: SUK 1 - XPTO 1

select id,"1_S" as "SUK 1", "1_X" as "XPTO 1", 
          "2_S" as "SUK 2", "2_X" as "XPTO 2", 
          "3_S" as "SUK 3", "3_X" as "XPTO 3", 
          "4_S" as "SUK 4", "4_X" as "XPTO 4"
  from (select row_number() over (partition by id order by suk) rn, t.* from t)
  pivot (max(suk) s, max(xpto) x for rn in (1, 2, 3, 4) )

有关 Oracle documentationpivot 的更多信息。