Oracle SQL - 如何" pivot"一排到多排

时间:2016-05-04 16:22:29

标签: sql oracle

在Oracle 12c中,我有一个视图,需要一些时间才能运行。当我添加where子句时,它将返回一行感兴趣的行。该行有像这样的列/值......

enter image description here

我需要将其翻转,以便每个EACH可以看到一行"设置"。我需要SQL来返回类似的东西 enter image description here

我知道我可以为每个入场集做一个UNION ALL,但由于视图需要一段时间才能运行,另外还有大约30个不同的集合(我只显示3 - Car,Boat和truck)< / p>

enter image description here

有更好的方法吗?我看过PIVOT / UNPIVOT,但我没有看到如何使这项工作。

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找UNPIVOT

WITH TEMP_DATA (ID1, CarPrice, CarTax, BoatPrice, BoatTax, TruckPrice, TruckTax)
AS (
select 'AAA', 1, 2, 3, 4, 5, 6 from dual )

  select TYPE, PRICE, TAX 
  from temp_data
  unpivot
  (
    (PRICE, TAX) 
    for TYPE IN 
    (
      (CarPrice, CarTax) as 'CAR',
      (BoatPrice, BoatTax) as 'BOAT',
      (TruckPrice, TruckTax) as 'TRUCK'
    )
  )
;

输出:

TYPE       PRICE        TAX
----- ---------- ----------
CAR            1          2 
BOAT           3          4 
TRUCK          5          6