如何使用 Oracle pivot 的查询?

How to use query for Oracle pivot?

我有如下四列。

我能得到这样的东西吗?

谢谢

我会推荐条件聚合。它是一种独立于数据库的语法,比 Oracle 特定的 pivot 语法更灵活:

select
    piece_id,
    max(case when attrb_code = 'A' then attrb_a_value end) a,
    max(case when attrb_code = 'B' then attrb_a_value end) b,
    max(case when attrb_code = 'C' then attrb_a_value end) c,
    max(case when attrb_code = 'D' then attrb_b_value end) d
from mytable
group by piece_id

只需在 PIVOT:

中使用 COALESCE(或 NVL
SELECT *
FROM   table_name
PIVOT (
  MAX( COALESCE( attrb_a_value, attrb_b_value ) )
  FOR attrb_code IN (
    'A' AS A,
    'B' AS B,
    'C' AS C,
    'D' AS D
  )
)

因此,对于您的示例数据:

CREATE TABLE table_name ( piece_id, attrb_code, attrb_a_value, attrb_b_value ) AS
SELECT 22333, 'A', 8, NULL FROM DUAL UNION ALL
SELECT 22333, 'B', 9, NULL FROM DUAL UNION ALL
SELECT 22333, 'C', 4, NULL FROM DUAL UNION ALL
SELECT 22333, 'D', NULL, 5 FROM DUAL UNION ALL
SELECT 22332, 'A', 2, NULL FROM DUAL UNION ALL
SELECT 22332, 'B', 3, NULL FROM DUAL UNION ALL
SELECT 22332, 'C', 7, NULL FROM DUAL UNION ALL
SELECT 22332, 'D', NULL, 5 FROM DUAL

这输出:

PIECE_ID |  A |  B |  C |  D
-------: | -: | -: | -: | -:
   22333 |  8 |  9 |  4 |  5
   22332 |  2 |  3 |  7 |  5

db<>fiddle here