如何将此结果放入HANA中的临时表?我是HANA的新手。现在它返回正确的数据,但是我需要将其放入或插入到表中以将其连接到其他表。
WITH monthss("MonthNumber") AS (
SELECT 0 FROM "DUMMY"
UNION ALL
SELECT 1 FROM "DUMMY"
UNION ALL
SELECT 2 FROM "DUMMY"
UNION ALL
SELECT 3 FROM "DUMMY"
UNION ALL
SELECT 4 FROM "DUMMY"
UNION ALL
SELECT 5 FROM "DUMMY"
UNION ALL
SELECT 6 FROM "DUMMY"
UNION ALL
SELECT 7 FROM "DUMMY"
UNION ALL
SELECT 8 FROM "DUMMY"
UNION ALL
SELECT 9 FROM "DUMMY"
UNION ALL
SELECT 10 FROM "DUMMY"
UNION ALL
SELECT 11 FROM "DUMMY"
UNION ALL
SELECT 12 FROM "DUMMY"
UNION ALL
SELECT 13 FROM "DUMMY"
)
SELECT
ADD_MONTHS(current_date, -"MonthNumber") AS "Date"
FROM monthss
答案 0 :(得分:1)
OP的查询目的似乎是创建一个包含今天和前三个月的日期的辅助表(帮助器表)。
输出是这样的(如果current_date
返回2020-02-07
):
|Date |
|----------|
|2020-02-07|
|2020-01-07|
|2019-12-07|
|2019-11-07|
|2019-10-07|
|2019-09-07|
|2019-08-07|
|2019-07-07|
|2019-06-07|
|2019-05-07|
|2019-04-07|
|2019-03-07|
|2019-02-07|
|2019-01-07|
尽管使用UNION ALL
技术确实有效,但是编写和维护却很繁琐,仅对较小的结果集有效,并且非常冗长。更糟糕的是,IMO-它专注于构建结果集的“方式”,而不是“什么”和“为什么”。
幸运的是,还有其他选择。
使用已经使用多年的GENERATE_SERIES
函数(甚至在HANA 1 SP12中也可用):
SELECT
GENERATED_PERIOD_START AS "Date"
FROM
SERIES_GENERATE_DATE ('INTERVAL 1 MONTH' -- step length
, add_months(current_date, -13) -- lower end
, current_date) -- upper END
ORDER BY
"Date" ASC;
此选项更加简洁,明确说明了目的(生成一系列日期)和细节(步长,最小和最大日期是什么以及输出顺序是什么)。 此外,这快很多(好,只有在创建更大的范围时才起作用)。
使用非常专用于HANA的内置日历辅助表 _SYS_REPO.M_TIME_DIMENSION
select
date_sql as "Date"
from
_SYS_BI.M_TIME_DIMENSION td
where
date_sql between add_months (current_date, -13)
and current_date
and day = extract (DAY from current_date)
order by "Date" ASC;
尽管这在我看来不太容易理解,但与原始方法相比,它仍然更好,更灵活。
还要注意,这要求表已经被填充(通过 "generate time data" )才能工作。
现在,这两种方法都只产生结果集,但是OP要求如何将它们存储到临时表中。
显而易见的第一个答案是,两个语句都可以与INSERT
组合。
但是,我建议完全不要这样做。
使用选项2)数据已在表中。 如果产生该范围的查询应在多个独立的语句中重用,则创建SQL视图将有所帮助(并且是正确的选择)。
如果那些原本会使用temp表的独立语句恰好是SQLScript块的一部分,那么更好的选择是将查询结果简单地分配给一个表变量,并在整个SQLScript中引用该表变量