考虑以下名为“VIEW”的 Teradata 视图,它由事务数据组成。
ATTR1 ATTR2 DATE1 DATE2 WEEK1 WEEK2 AMOUNT
A B 1/1/2019 1/8/2019 201901 201902 10
A B 12/26/2018 1/8/2019 201852 201902 20
A B 1/1/2019 1/15/2019 201901 201903 30
A B 1/8/2019 1/15/2019 201902 201903 30
DATE1 是过帐日期,DATE2 是交易的清算日期。WEEK1 和 WEEK2 分别是 DATE1 和 DATE2 的会计周。ATTR 是交易的随机属性。我需要按属性的“周”报告交易金额。
例如,对于 201901 周,我们希望查看 201901 周和之前的过帐日期以及 201901 之后的清算日期的交易金额。请参见下面的代码。
select ATTR1,
ATTR2,
SUM(CASE WHEN WEEK2 > 201852 AND WEEK1 <= 201852 THEN AMOUNT END) AS AMT_201852,
SUM(CASE WHEN WEEK2 > 201901 AND WEEK1 <= 201901 THEN AMOUNT END) AS AMT_201901,
SUM(CASE WHEN WEEK2 > 201902 AND WEEK1 <= 201902 THEN AMOUNT END) AS AMT_201902,
FROM VIEW
GROUP BY 1,2
结果:
ATTR1 ATTR2 AMT_201852 AMT_201901 AMT_201902
A B 20 60 60
正如上面的代码所暗示的,我们必须每周手动创建我们希望避免的列。有没有办法在几周过去时动态创建这些列?还是有更好的方法来表示这一点?在报告中,使用 WEEK1 作为过滤器将过滤掉较早的几周(如果 WEEK1 为 201901,则 201852 将被过滤掉并丢失相应的数量)。我们最终将此 SQL 放入 PowerBI 仪表板。
谢谢!