加入Sales表的第二个实例以获得上周销售额

时间:2013-05-23 08:26:52

标签: sql teradata

我有一个销售表,显示每周的产品编号,销售价值和销售量。我需要构建一个报告来显示这些值和卷以及上周的等效值。我还有一个Weeks表,它给出了本周的前一周数字(例如,如果当前周是2013-01,那么前一周的值是2012-52)。

因此,我认为从Weeks表中加入产品编号和上周编号的另一个Sales实例非常简单。然而,Teradata不允许我这样做,最初它抛出了Improper column reference in the search condition of a joined table的错误,当我在第二个Sales实例之前重新命令查询引用Weeks时它现在尝试运行但是给了我{{1}错误,所以我认为我的方法是不正确的。我的SQL如下:

No more spool space

有人可以在这里建议我做错了吗?看起来这应该是可以实现的。

1 个答案:

答案 0 :(得分:1)

我建议使用Window Aggregate Function通过SALES表的单次传递来完成此任务:

SELECT DISTINCT
       s.Week_Number,
       s.Product_Number,
       s.Sales_Value,
       s.Sales_Volume,
       MAX(s.Sales_Value) OVER (PARTITION BY s.Product_Number 
                                    ORDER BY s.Week_Number DESC 
                                ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS LW_Sales_Value,
       MAX(s.Sales_Volume) OVER (PARTITION BY s.Product_Number
                                    ORDER BY s.Week_Number DESC 
                                ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS LW_Sales_Volume
  FROM SALES s;