是否可以在计算视图中创建计算列,如下所示:
Table A
Month Amount
1 1000
1 2000
2 3000
2 3500
filter month={CurrentMonth}; // here CurrentMonth= 2
输出
[{
previousMnthAmount:3000,
currentMnthAmount:6500
}]
答案 0 :(得分:0)
我建议创建一个脚本计算视图。在其中,您可以编写SQLScript代码,以便根据需要进行必要的选择以获取数据。
根据您要使用视图的内容,我看到两个选项:
如果您使用输入参数查看视图,如果您真的只对相应于一个月的数据感兴趣,则可以避免一些不必要的计算。
以下内容应该有效:
SELECT "T1"."MONTH", "T1"."TOTAL" AS "CURRENT_TOTAL", "T2"."TOTAL" AS "PREVIOUS_TOTAL"
FROM (SELECT "MONTH", SUM("AMOUNT") AS "TOTAL" FROM #TEST GROUP BY "MONTH") AS "T1"
LEFT JOIN (SELECT "MONTH", SUM("AMOUNT") AS "TOTAL" FROM #TEST GROUP BY "MONTH") AS "T2"
ON "T1"."MONTH" = "T2"."MONTH" + 1;
如果你把它包装成一个视图,那么你可以从中选择并做一个WHERE" MONTH" = 2并获得第2个月的值。
您可以通过完全删除连接并执行过滤的总和来优化sql:
SELECT (SELECT SUM("AMOUNT") FROM #TEST WHERE "MONTH" = 2) AS "CURRENT_TOTAL",
(SELECT SUM("AMOUNT") FROM #TEST WHERE "MONTH" = 1) AS "PREVIOUS_TOTAL" FROM DUMMY;
当然,在一个计算中。您应该使用参数(例如2 - >:IV_MONTH和1 - >:IV_MONTH - 1)替换固定月份值(2和1)。使用与上面相同的内容,您将获得以下结果:
答案 1 :(得分:0)
我不确定问题的背景,对于您尝试解决的实际问题,这可能不是一个合适的答案。如果没有道歉:-)
如果这是一个数据仓库实现,并且您希望在前端报告中获得该信息,则更通用的方法是在时间维度中具有更新的current_month和previous_month标志日常。然后,您可以在计算或报告前端使用它们。
然后,这将适用于任何视图,而不是为该情况创建特定视图。