在oracle中动态地将月份名称作为列别名

时间:2014-07-24 11:27:41

标签: sql oracle

我在列别名中需要月份名称。例如:

select d.Job_name,  nvl(a.cnt,0) as May, nvl(b.cnt,0) as June, nvl(c.cnt,0) as July
from (query);

这里我将5月,6月和7月的硬编码作为列别名。我需要它们动态。

我需要以下:

select d.Job_name,  nvl(a.cnt,0) as (current_monthe-2), nvl(b.cnt,0) as (current_month-1), nvl(c.cnt,0) as current_month
from (inner query)

请帮我解决这个问题。如果需要任何其他信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以构建动态查询以根据需要放置列名称,例如:

EXECUTE IMMEDIATE 'select d.Job_name,  nvl(a.cnt,0) as '|| to_char(add_months(SYSDATE, -2), 'Month') ||', nvl(b.cnt,0) as '|| to_char(add_months(SYSDATE, -1), 'Month') || ', nvl(c.cnt,0) as ' || to_char(SYSDATE, 'Month') || ' from (inner query)'
into v_values_set;

使用静态sql做你想做的事情是非常困难的,也许可以使用PIVOT选项来动态设置列名。