考慮我有一張表作爲Employee_Details,其中Employee_Name和Employee_Level被維護。如何選擇行數據作爲列標題並根據Oracle中的標題排列值?
對於實例
每個Employee_Level應根據
考慮我有一張表作爲Employee_Details,其中Employee_Name和Employee_Level被維護。如何選擇行數據作爲列標題並根據Oracle中的標題排列值?
對於實例
每個Employee_Level應根據
好東西,你提到你的Oracle版本employee_level我的輸出列,所有的Employee_name應當按字母順序排列( 10g在你的情況下) - 在大多數情況下應該包含在你的問題中。
這就排除了PIVOT的使用 - 就像這裏提供的解決方案:Need to arrange employee names as per their city column wise(然而,我在本答覆的最後提供了一個「手動」PIVOT解決方案)。
另一種方法是使用完整的外連接,就像這樣。由於迭代的完整外連接,您必須小心連接條件(請注意在最後一次連接條件中使用NVL)。
with
employee_details (employee_name, employee_level) as (
select 'Vingesh' , 'Manager' from dual union all
select 'Ragul' , 'Senior Manager' from dual union all
select 'Nivithen', 'Senior Manager' from dual union all
select 'Joe' , 'Associate Manager' from dual union all
select 'Arul' , 'Manager' from dual union all
select 'Rishi' , 'Manager' from dual
),
prep (employee_name, employee_level, rn) as (
select employee_name, employee_level,
row_number() over (partition by employee_level order by employee_name)
from employee_details
)
select p1.employee_name as associate_manager,
p2.employee_name as manager,
p3.employee_name as senior_manager
from (select employee_name, rn from prep where employee_level = 'Associate Manager') p1
full outer join
(select employee_name, rn from prep where employee_level = 'Manager') p2
on p1.rn = p2.rn
full outer join
(select employee_name, rn from prep where employee_level = 'Senior Manager') p3
on nvl(p1.rn, p2.rn) = p3.rn
order by 1, 2, 3
;
ASSOCIATE_MANAGER MANAGER SENIOR_MANAGER
----------------- ----------------- -----------------
Joe Arul Nivithen
Rishi Ragul
Vingesh
3 rows selected.
您也可以使用相同的「prep」因式分解子查詢,並將迭代的完整外部聯接替換爲下面的select語句。您可能想嘗試這兩種解決方案,並查看哪些數據更快;結果應該是一樣的。
select min(case when employee_level = 'Associate Manager'
then employee_name end) as associate_manager,
min(case when employee_level = 'Manager'
then employee_name end) as manager,
min(case when employee_level = 'Senior Manager'
then employee_name end) as senior_manager
from prep
group by rn
order by 1, 2, 3
;
感謝您分享這兩個選項。我採取了第二種選擇,它解決了我的問題...... – Subburaj
水平是否固定?聽起來就像你想旋轉,但如何取決於你在哪個版本,以及它是否需要動態。 –
是等級是固定的,員工姓名將與現有員工等級一起新添加。我正在使用Oracle 10g – Subburaj