2012-07-03 55 views
4

我試圖動態設置列標題。Oracle中的動態列名稱

這裏的例子:

SELECT Name, COUNT(cars) AS (('cars_from_year_') || year) 
FROM peaple 
WHERE car = 'GM' 
AND Date BETWEEN (year || '0401') AND (year || '0430'); 

year應該是前。 2012年和每年(2013,2014,...)變化(即這是動態的)。

我知道電話select to_char(sysdate,'YYYY') from dual但不知道如何實現它上面的select語句?

+0

看到這裏:https://forums.oracle.com/forums/thread.jspa?threadID=678873 –

回答

1

它可以用交叉表完成。看一看thisthis用於查詢oracle上的交叉表

3

列名必須在編譯時已知。你顯然想要使用動態列名,所以你需要推遲編譯,直到實際執行。有幾種方法可以做到這一點:例如,DBMS_SQL,EXECUTE IMMEDIATEREF CURSOR

下面是與REF CURSORSQL*Plus一個例子:

SQL> var x refcursor 
SQL> DECLARE 
    2  l_year NUMBER := 2012; 
    3 BEGIN 
    4  OPEN :x 
    5  FOR 'SELECT ''This is the year ''||:year AS "Year ' || l_year || '" 
    6    FROM DUAL' 
    7  USING l_year; 
    8 END; 
    9/

PL/SQL procedure successfully completed. 

SQL> print x 

Year 2012 
-------------------------- 
This is the year 2012 
0

現在嘗試在11g中有效,否則PL/SQL是你按照文森特的Malgrat唯一的選擇轉動命令對應。

不錯的問題!