4

列ヘッダーを動的に設定しようとしています。

ここに例があります:

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ステートメントを実装する方法を知りませんか?

4

3 に答える 3

3

列名はコンパイル時に認識されている必要があります。明らかに動的な列名を使用したいので、実際の実行までコンパイルを延期する必要があります。これを行うにはいくつかの方法がDBMS_SQLありEXECUTE IMMEDIATEますREF CURSOR

REF CURSORとを使用した例を次に示しSQL*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
于 2012-07-03T14:21:27.913 に答える
1

クロス集計でできます。Oracleでクロス集計を照会するには、これこれを見てください

于 2012-07-03T14:05:11.120 に答える
0

11gで利用できるようになったピボットコマンドを試してください。そうでない場合は、VincentMalgratによるとpl/sqlが唯一のオプションです。

いい質問です!

于 2012-12-27T11:16:17.310 に答える