2016-06-22 63 views
0

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

我想要做的是每行都对应一个日期 - 例如,第一行将是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 

回答

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));