2016-06-07 33 views
0

我有一個表(EMP_Comm_Calc),如下所示:移調行列根據2列中的Oracle 11g SQL

Min-Wage Max-Wage Comm% Work_Type_ID Working_Days Max_Allowed Min_Allowed 
400 2000 30 2426 20 2000 1888 
450 2000 30 2426 30 2000 1888 
1680 2000 54 2426 20 2000 1888 
1680 2000 54 2426 30 2000 1888 
1900 2000 65 2426 20 2000 1888 
1950 2000 65 2426 30 2000 1888 
450 2500 30 2427 20 2500 1999 
450 2500 30 2427 30 2500 1999 
2100 2500 54 2427 20 2500 1999 
2100 2500 54 2427 30 2500 1999 
2380 2500 65 2427 20 2500 1999 
2380 2500 65 2427 30 2500 1999 

現在我想基於通訊%和Working_days每個Work_type_id轉置的行,預期輸出是:

Work_Type_ID Min2065 Max2065 Min2030 Max2030 Min2054 Max2054 Min3065 Max3065 Min3030 Max3030 Min3054 Max3054 Max_allowed Min_Allowed 
2426 1900 2000 400 2000 1680 2000 1950 2000 450 2000 1680 2000 2000 1888 
2427 2380 2500 450 2500 2100 2500 2380 2500 450 2500 2100 2500 2500 1999 
+0

的可能的複製[甲骨文樞軸 - 轉換數值爲列(http://stackoverflow.com/questions/17116354/oracle-pivot轉換值到列) –

+0

歡迎來到SO!在字面上有幾千個類似的問題 - 只是搜索Oracle數據透視表。投票結束。 –

回答

0

甲骨文設置

CREATE TABLE table_name (Min_Wage, Max_Wage, "Comm%", Work_Type_ID, Working_Days, Max_Allowed, Min_Allowed) AS 
SELECT 400, 2000, 30, 2426, 20, 2000, 1888 FROM DUAL UNION ALL 
SELECT 450, 2000, 30, 2426, 30, 2000, 1888 FROM DUAL UNION ALL 
SELECT 1680, 2000, 54, 2426, 20, 2000, 1888 FROM DUAL UNION ALL 
SELECT 1680, 2000, 54, 2426, 30, 2000, 1888 FROM DUAL UNION ALL 
SELECT 1900, 2000, 65, 2426, 20, 2000, 1888 FROM DUAL UNION ALL 
SELECT 1950, 2000, 65, 2426, 30, 2000, 1888 FROM DUAL UNION ALL 
SELECT 450, 2500, 30, 2427, 20, 2500, 1999 FROM DUAL UNION ALL 
SELECT 450, 2500, 30, 2427, 30, 2500, 1999 FROM DUAL UNION ALL 
SELECT 2100, 2500, 54, 2427, 20, 2500, 1999 FROM DUAL UNION ALL 
SELECT 2100, 2500, 54, 2427, 30, 2500, 1999 FROM DUAL UNION ALL 
SELECT 2380, 2500, 65, 2427, 20, 2500, 1999 FROM DUAL UNION ALL 
SELECT 2380, 2500, 65, 2427, 30, 2500, 1999 FROM DUAL; 

查詢

SELECT * 
FROM (
    SELECT Work_Type_ID, 
     Working_Days||"Comm%" AS pivotvalue, 
     Min_Wage, 
     Max_Wage, 
     Max_Allowed, 
     Min_Allowed 
    FROM table_name 
) 
PIVOT (
    MIN(Min_wage) AS Min, 
    MAX(Max_Wage) AS Max 
    FOR pivotvalue IN (2065, 2030, 2054, 3065, 3030, 3054) 
); 

輸出

WORK_TYPE_ID MAX_ALLOWED MIN_ALLOWED 2065_MIN 2065_MAX 2030_MIN 2030_MAX 2054_MIN 2054_MAX 3065_MIN 3065_MAX 3030_MIN 3030_MAX 3054_MIN 3054_MAX 
------------ ----------- ----------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- 
     2426  2000  1888  1900  2000  400  2000  1680  2000  1950  2000  450  2000  1680  2000 
     2427  2500  1999  2380  2500  450  2500  2100  2500  2380  2500  450  2500  2100  2500 
+0

@SGW:你是如何編寫pivotvalue部分的? – SubhasisM