【问题标题】:Add query results in columns SQL在 SQL 列中添加查询结果
【发布时间】:2017-02-07 20:01:36
【问题描述】:

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

    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; 

我使用甲骨文。

有可能吗?

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 您可以添加您当前的查询吗?
  • 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;

标签: sql oracle pivot crosstab


【解决方案1】:

使用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

编辑:

如何更改 sku 和 xpto 的列名?预期: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 documentation 中的 pivot 的更多信息。

【讨论】:

  • 谢谢。我可以适应我的情况。
  • 如何分离 sku 和 xpto?
  • 将枢纽子句更改为:pivot (max(suk) suk, max(xpto) xpto for rn in (1, 2, 3, 4))
  • 完美。再次感谢您
  • 如何更改 sku 和 xpto 的列名?预计:SUK 1 - XPTO 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 2018-07-25
  • 2020-11-04
  • 1970-01-01
  • 2012-08-26
  • 2021-07-23
相关资源
最近更新 更多