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_SQLEXECUTE IMMEDIATE例如REF CURSOR

REF CURSOR这是一个带有and的示例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

Try the pivot comands now available in 11g otherwise pl/sql is your only option as per Vincent Malgrat.

Nice question!

于 2012-12-27T11:16:17.310 回答