SQL动态列名

时间:2016-08-10 07:51:12

标签: sql netezza

如何声明更改的列名?

我从数据库中获取了一些数据并且我对过去12个月感兴趣,所以我只接受发生的事件,让我们在2016-07' 2016年 - 06'等等...

然后,我希望我的桌子看起来像这样:

event type | 2016-07 | 2016-06
-------------------------------
    A      |   12    |   13
    B      |   21    |   44
    C      |   98    |   12

如何实现使用以前的YYYY-MM模式命名列的效果,请记住,具有该查询的报表可以随时执行,因此它会发生变化。

仅针对上个月的简化查询:

select distinct 
    count(event),
    date_year_month,
    event_name 
from 
   data_base
where date_year_month = TO_CHAR(add_months(current_date, -1),'YYYY-MM')
group by event_name, date_year_month

1 个答案:

答案 0 :(得分:0)

我不认为有一种自动转换年 - 月列的方法,并根据数据动态更改结果中的列数。

但是,如果您正在寻找透视解决方案,那么您可以在netezza中使用表函数。

select event_name, year_month, event_count
from event_counts_groupby_year_month, table(inza.inza.nzlua('
local rows={}
function processRow(y2016m06, y2016m07)
    rows[1] = { 201606, y2016m06 }
    rows[2] = { 201607, y2016m07 }
    return rows
end

function getShape()
    columns={}
    columns[1] = { "year_month", integer }
    columns[2] = { "event_count", double }
    return columns
end',
y2016m06, y2016m07));

您可以在此基础上构建一个包装器,以使用shell脚本根据表中存在的年份动态生成查询。