Sql 在Hana中使用with子句创建表

Sql 在Hana中使用with子句创建表,sql,hana,Sql,Hana,我想使用with子句创建一个表: 例如: with cte as (SELECT B.STEUC "HSN", CASE WHEN A.FORMAT_CD='520' THEN '2' ELSE A.FORMAT_CD END FORMAT_CD, CASE WHEN A.FORMAT_CD='520' THEN 'DIGITAL' ELSE A.FORMAT_DESC END FORMAT_DESC, A.ARTICLE, A.R

我想使用with子句创建一个表:

例如:

with cte as
(SELECT B.STEUC "HSN",
        CASE WHEN A.FORMAT_CD='520' THEN '2' ELSE A.FORMAT_CD END FORMAT_CD,
        CASE WHEN A.FORMAT_CD='520' THEN 'DIGITAL' ELSE A.FORMAT_DESC END FORMAT_DESC,
        A.ARTICLE,
        A.REGION "STATE",
        SUM(CASE WHEN BWART IN ('702','704','708','711','713','715','717','551','553','555','903','909','951','Z09') THEN DMBTR ELSE 0 END) - 
        SUM(CASE WHEN BWART IN ('701','703','707','712','714','716','718','552','554',' 556','904','910','952','Z10') THEN DMBTR ELSE 0 END) "LOSS_VALUE"
FROM "_SYS_BIC"."RRA.DnL/CV_STOCK_MOVEMENT" A INNER JOIN "P22"."MARA" B ON A.ARTICLE=B.MATNR 
WHERE posting_date BETWEEN '20181101' AND '20181130' AND
      BWART IN ('702','704',' 708',' 711','713','715','717','701','703','707','712','714','716','718','551',
      '552','553','554','555','556','903','904','909','910','951','952','Z09','Z10') AND
      A.COMPANY_CODE='9008' AND
      A.LEVEL2 NOT IN ('10','99') AND
      A.LEVEL5 NOT IN ('140601010') AND
      A.FORMAT_CD NOT IN ('51','56','62','509')
GROUP BY B.STEUC,A.ARTICLE,A.REGION,A.COMPANY_CODE,A.FORMAT_CD,
        A.FORMAT_DESC)
SELECT A.HSN,
       A.STATE,
       A.FORMAT_CD,
       A.FORMAT_DESC,
       A.ARTICLE,
       A.LOSS_ART,
       B.LOSS
FROM (
SELECT A.HSN,
          A.STATE,
       A.FORMAT_CD,
       A.FORMAT_DESC,
       A.ARTICLE,
       A.LOSS LOSS_ART,
       SUM(A.LOSS) OVER (PARTITION BY A.HSN,A.STATE,A.FORMAT_CD ORDER BY  LOSS DESC) LOSS   
FROM (SELECT A.HSN,A.STATE,A.FORMAT_CD,A.FORMAT_DESC,A.ARTICLE,SUM(LOSS_VALUE) LOSS FROM 
--"RR_ANALYST"."REETIKA_LOSS_DATA_1" 
cte A 
INNER JOIN P22.MARA B ON A.ARTICLE=B.MATNR
      WHERE B.ATTYP<>'11'
      GROUP BY A.HSN,A.STATE,A.FORMAT_CD,A.FORMAT_DESC,A.ARTICLE 
      HAVING SUM(LOSS_VALUE)>0 ) A
      ) A ,
      (SELECT A.HSN,A.STATE,A.FORMAT_CD,SUM(LOSS_VALUE) LOSS FROM 
      cte  A 
      group by A.HSN,A.STATE,A.FORMAT_CD HAVING SUM(LOSS_VALUE)>0) B
  WHERE A.HSN=B.HSN AND
        A.STATE=B.STATE AND
        A.FORMAT_CD=B.FORMAT_CD AND
        A.LOSS<=B.LOSS*1
我想这在Hana中是不受支持的

有什么可以替代相同的方法? hana是否像oracle一样支持后台处理

我知道我可以导出结果集,然后相应地创建一个表

但是有什么方法可以动态地实现和创建表吗?

另一种方法是老式的方法-内联视图

CREATE column TABLE t AS 
  SELECT * 
  FROM (SELECT 1 as some_value  --> this is your WITH factoring clause
        FROM dummy
        UNION ALL 
        SELECT 2 
        FROM dummy
      );

这只是一个演示查询。我的需求有一个不同的查询,它有很多记录。我已经使用with子句对其进行了优化,需要使用相同的子句创建表。没关系。整个CTE可以用作内联视图。您所称的优化取决于优化器对它的看法,而不是您编写的使它看起来漂亮的方式。我不是说你做错了什么,只是希望你能确保它真的被优化了。我用我原来的查询更新了这个问题。另外,基本要求是创建一个带有with子句的表。