2014-07-14 21 views
0

我有一個數據如下。想要在兩列上轉軸數據

Region Transactions Production Value 
EAST Sales    LUX  1000 
EAST Sales    Cinthol 1500 
EAST Purchases   LUX  1000 
EAST Purchases   Cinthol 1500 
NORTH Sales    LUX  3000 
NORTH Sales    Cinthol 3500 
NORTH Purchases   LUX  3000 
NORTH Purchases   Cinthol 3500 
SOUTH Sales    LUX  4000 
SOUTH Sales    Cinthol 4500 
SOUTH Purchases   LUX  4000 
SOUTH Purchases   Cinthol 4500 
WEST Sales    LUX  2000 
WEST Sales    Cinthol 2500 
WEST Purchases   LUX  2000 
WEST Purchases   Cinthol 2500 

我有一個表中的數據在上述格式近1,100,000行。

因此,通過查詢我想要以下格式的數據。

   LUX    CINTHOL 
Region SALES PURCHASES SALES PURCHASES 
EAST 1000 1000 1500 1500 
WEST 2000 2000 2500 2500 
NORTH 3000 3000 3500 3500 
SOUTH 4000 4000 4500 4500 
+2

哪個RDBMS您使用的?請相應地編輯標籤。 –

回答

-1

如果在Oracle 11g中您可以使用PIVOT語句中的RDBMS:11g-pivot

WITH p1 AS 
    (
    SELECT region, SALES_SUM_VALUE, PURCHASES_SUM_VALUE 
     FROM 
     (
     SELECT * 
      FROM 
      (
      SELECT * 
       FROM special_data 
       WHERE production = 'LUX' 
     ) 
      PIVOT(SUM(value) AS SUM_VALUE FOR(transactions) IN('Sales' AS Sales, 'Purchases' AS Purchases)) 
    ) 
) 
    , p2 AS 
    (
    SELECT region, SALES_SUM_VALUE, PURCHASES_SUM_VALUE 
     FROM 
     (
     SELECT * 
      FROM 
      (
      SELECT * 
       FROM special_data 
       WHERE production = 'Cinthol' 
     ) 
      PIVOT(SUM(value) AS SUM_VALUE FOR(transactions) IN('Sales' AS Sales, 'Purchases' AS Purchases)) 
    ) 
) 
SELECT p1.region, p1.SALES_SUM_VALUE LUX_SALES, p1.PURCHASES_SUM_VALUE LUX_PURCHASES, p2.SALES_SUM_VALUE Cinthol_SALES, p2.PURCHASES_SUM_VALUE Cinthol_PURCHASES 
    FROM p1, p2 
    WHERE p1.region = p2.region 

我已經爲你準備了一些小提琴:SQL FIDDLE

+0

爲什麼是-1?我爲甲骨文準備了Fiddle以獲得更好的答案。 – WBAR