2011-11-08 24 views
0

我有一個表是這樣的:如何使用SQL列值作爲Oracle列名11

Date  | Communication_Type 
    ---------- -------------------- 
    12/10/2011 EMAIL 
    12/10/2011 WEB 
    12/10/2011 WEB 
    11/10/2011 MAIL 
    11/10/2011 FAX 
    11/10/2011 FAX 
    11/10/2011 EMAIL 

我想編寫一個查詢來顯示特定日期前兩名通信類型,但通信類型不限於此處顯示的,他們可能是100

一個有沒有辦法,我能得到這樣的輸出,即對於11/11/2011

<_top_communication_type_count> | <second_top_communication_type_count> 
-------------------------------- -------------------------------------- 
2        1  

哪裏_top_communicat在這種情況下ion_type_count將是FAX_COUNT,但12/11/2011將是WEB_COUNT

它有點難以解釋,但希望你明白我的意思! 我已經找到mySQL的例子,但不是爲Oracle。

+0

請出示的MySQL版本(和什麼錯誤做你使用它?) –

回答

0

不可能將未知值的列表用作Oracle中的列名(10g確實有pivot,但它需要一個已知的值列表)。從理論上講,你可以通過先查詢唯一值,然後建立一個動態查詢來完成,但對於邊際有用的結果來說,這將是很多工作。

下面是在一個正常的基於行的格式返回數據的解決方案(基於@邁克爾杜蘭特的答案,修改在甲骨文工作):

select * 
from (
    select communication_type 
    from communications c 
    where date = 'the_date' 
    order by count(c.communication_type) 
    group by c.communication_type) 
where rownum <= 2 
相關問題