如何编写unpivot查询?

时间:2016-06-22 14:28:53

标签: sql oracle unpivot

我有一张桌子需要查询。该表包含4列,可以调用一个“日期”,另一个调用“价格A”,然后调用“价格B”和“B名称”。 所以这些是我的列标题,当然每行都有一个日期,价格A和该日期的价格B,以及相应的B名称。

我想要做的是让每一行对应一个日期 - 例如,第一行将是01/01/2016,并且每个B都有一个单独的列。所以我将能够看到,因为任何日期,每个B的相应价格。不幸的是,由于我的SQL技能有限,我不知道如何开始这种操作。

想要:

               B1     B2     B3      B4     A
   01/06/2016: 1      5      6       6      3
   02/06/2016: 1.5    5.2    6.1     6.3    3

有:

              Date    Name B     Price B    Price A
         1/06/2016    B1           1           3
         1/06/2016    B2           5           3
         1/06/2016    B3           6           3
         1/06/2016    B4           6           3

1 个答案:

答案 0 :(得分:0)

您可能会将UNPIVOT与PIVOT混淆。 PIVOT将行转换为列,而UNPIVOT则相反。

所以使用PIVOT然后这样的东西可以工作:     

SELECT D, B1, B2, B3, B4, A 
FROM
(
  SELECT TO_CHAR("Date",'DD/MM/YYYY')||':' as D, 
  "Name B" as Name, 
  "Price A" as A, 
  "Price B" as PriceB
  FROM WHATIHAVE
)
PIVOT ( MAX(PriceB) FOR Name IN (B1, B2, B3, B4) );