Oracle中的PIVOT函數用于將行數據轉換為列數據,即將一列中的多個值轉換為多列。它的基本語法如下:
SELECT 列1, 列2, ...
FROM 表
PIVOT (聚合函數(列名)
FOR 列名
IN (值1, 值2, ...))
其中,列1、列2等是要保留的非聚合列,聚合函數是要應用在列名上的聚合函數(例如,SUM、AVG、COUNT等),列名是要轉換為列的原始列的名稱,值1、值2等是原始列中的唯一值。
舉例來說,假設有一個名為sales的表,包含以下列:product(產品名稱)、region(地區)、quarter(季度)、amount(銷售金額),我們可以使用PIVOT函數將地區作為列,季度作為行,計算每個季度每個地區的銷售總額:
SELECT *
FROM (
SELECT region, quarter, amount
FROM sales
)
PIVOT (
SUM(amount)
FOR region
IN ('東北' AS NE, '華北' AS NC, '華東' AS EC, '華南' AS SC, '西南' AS SW)
)
上述查詢將返回一個結果集,其中包含季度作為行,以及NE(東北)、NC(華北)、EC(華東)、SC(華南)、SW(西南)作為列,每個單元格的值為對應地區在該季度的銷售總額。
需要注意的是,PIVOT函數只能在查詢中使用,不能在DML語句(如INSERT、UPDATE、DELETE)中使用。另外,PIVOT函數要求原始列的值必須是有限的,不能是一個范圍或連續的值。