分组问题之间的SQL months_

时间:2015-10-30 15:43:12

标签: sql group-by aggregate-functions netezza

第一篇文章;对我很轻松。

相对较新的SQL(真正超出简单查询的任何东西),但试图学习更复杂的功能以利用优质的服务器资源。我的问题:

我想使用SUM函数来汇总各种来源的现金流量。我希望看到这些现金流量按月计算。因为现金流量是在不同的时间开始的,所以我想对它们进行调整以使它们全部对齐。我目前的代码:

select 
    months_between(A.reporting_date, B.start_date) as season,
    sum(case when A.current_balance is null then B.original_balance 
        else A.current_balance end) as cashflow

  from dataset1 A, dataset2 B

  group by season
  order by season

现在,执行这样的代码会生成一条错误消息,指出A.reporting_date和B.start_date必须是GROUPED或AGGREGATE函数的一部分。

问题是,如果我将它们添加到GROUP BY语句中,当它生成没有错误的输出时,我得到的现金流量总和基本上是与所有分组变量的笛卡尔交叉。

这么长的故事简短,我有什么方法可以获得仅按季节分组的现金流量总和?如果是这样,任何想法怎么做?

谢谢。

1 个答案:

答案 0 :(得分:2)

大多数数据库都不允许使用先前在wheregroup byorder by子句中定义的列别名。

对于您的查询,您应使用months_between(A.reporting_date, B.start_date)代替seasongroup by中的别名order by

此外,您的查询将返回cross product,因为未指定join条件。

select 
months_between(A.reporting_date, B.start_date) as season,
sum(case when A.current_balance is null then B.original_balance 
    else A.current_balance end) as cashflow
from dataset1 A
JOIN dataset2 B ON --add a join condition
group by months_between(A.reporting_date, B.start_date)
order by months_between(A.reporting_date, B.start_date)