Upsert查询中的错误

2020-08-17 18:56发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


编写一个upsert查询,该查询从Select查询中获取数据输入。 我需要具有Select查询的别名,以便我可以在上一个WHERE子句中使用它。 当我单独运行它时,select查询正在工作,但由于无法满足条件而无法执行查询,因此无法具有别名。 在Hana Service中运行此查询。

下面是表格的片段。

COM_SAP_APIMGMT_ANALYTICS_READSERVICE_MASTER_TABLE

 COM_SAP_APIMGMT_ANALYTICS_READSERVICE_AGGREGATED_TABLE 

 upsert" 98CF35ADCA7E47999D27B1D4EA8228F8"。" COM_SAP_APIMGMT_ANALYTICS_READSERVICE_AGGREGATED_TABLE"如AGG_TABLE

 ( "ID",

 " APIPROXY",

 " REQUESTMETHOD",

 )

 值(

 选择

 SYSUUID,

 " API_PROXY",

 " REQUEST_METHOD",

 从" COM_SAP_APIMGMT_ANALYTICS_READSERVICE_MASTER_TABLE"开始为FACT_TABLE

 哪里

 " CREATED_TIME"> ='2020-05-16 09:00:00.000000000'和" CREATED_TIME" <='2020-05-16 09:30:00.000000000'

 通过...分组

 " API_PROXY",

 " REQUEST_URL",

 " PROXY_BASEPATH",

 " REQUEST_METHOD",

 )

 哪里

 AGG_TABLE。" APIPROXY" = FACT_TABLE。" API_PROXY"并且

 AGG_TABLE。" REQUESTMETHOD" = FACT_TABLE。" REQUEST_METHOD"


 

(49.2 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


编写一个upsert查询,该查询从Select查询中获取数据输入。 我需要具有Select查询的别名,以便我可以在上一个WHERE子句中使用它。 当我单独运行它时,select查询正在工作,但由于无法满足条件而无法执行查询,因此无法具有别名。 在Hana Service中运行此查询。

下面是表格的片段。

COM_SAP_APIMGMT_ANALYTICS_READSERVICE_MASTER_TABLE

 COM_SAP_APIMGMT_ANALYTICS_READSERVICE_AGGREGATED_TABLE 

 upsert" 98CF35ADCA7E47999D27B1D4EA8228F8"。" COM_SAP_APIMGMT_ANALYTICS_READSERVICE_AGGREGATED_TABLE"如AGG_TABLE

 ( "ID",

 " APIPROXY",

 " REQUESTMETHOD",

 )

 值(

 选择

 SYSUUID,

 " API_PROXY",

 " REQUEST_METHOD",

 从" COM_SAP_APIMGMT_ANALYTICS_READSERVICE_MASTER_TABLE"开始为FACT_TABLE

 哪里

 " CREATED_TIME"> ='2020-05-16 09:00:00.000000000'和" CREATED_TIME" <='2020-05-16 09:30:00.000000000'

 通过...分组

 " API_PROXY",

 " REQUEST_URL",

 " PROXY_BASEPATH",

 " REQUEST_METHOD",

 )

 哪里

 AGG_TABLE。" APIPROXY" = FACT_TABLE。" API_PROXY"并且

 AGG_TABLE。" REQUESTMETHOD" = FACT_TABLE。" REQUEST_METHOD"


 

(49.2 kB)
付费偷看设置
发送
4条回答
空代码
1楼-- · 2020-08-17 19:34

为什么需要WHERE子句? upsert的目的是使用主键(在AGG上)确定FACT中的行是新的(插入)还是不新的(更新)。 SELECT列表将映射到您指定的表列,以便HANA已经知道您正在将APIPROXY与API_PROXY进行比较。

在这里举一个非常简单的示例:

创建表AGG(A1  int,A2 int);
 修改表AGG添加主键(A1);

 创建表FCT(A3 int,A4 int);

 upsert AGG(
 A1,A2
 )
 从FCT GROUP BY A3中选择A3,sum(A4);
 

AGG有2列,即A1和A2。 FCT有2列,A3和A4。 此命令使用AGG上的主键(主键在A1列上),并将其与FCT中A3列中的值进行比较。 upsert中的第一列根据语句的格式映射到select的第一列,依此类推。 无需提供where子句。

现在,如果在AGG上没有主键,那么总会得到新的行。 没有主键意味着没有办法检查必须更新的行,因此所有数据都将插入。

upsert语法确实支持WHERE子句,但这仅在不使用时才使用。 有一个子查询;

UPSERT命令这样说:带有子查询的UPSERT(或REPLACE)语句的运行方式类似于INSERT语句。 该命令的例外是,如果表中的现有行具有与新行相同的主键值,则该行将使用子查询中返回的记录进行更新。 如果表没有主键,则该命令以与INSERT语句等效的方式起作用,因为它不能用作索引来检查行重复。

Mark

追夢秋陽
2楼-- · 2020-08-17 19:30

沙希德·阿赫塔尔博士

谢谢,现在看起来好多了。

CPLASF-自律
3楼-- · 2020-08-17 19:19

upsert查询是否与硬编码值一起使用(取出选择查询)?

微wx笑
4楼-- · 2020-08-17 19:28

嗨,迈克·阿普比

是的,如果我删除了最后一个where子句和表引用,Upsert查询也可以使用硬编码值,甚至可以使用select查询。

事实

AGG

查询摘要:

工作一个

 UPSERT AGG
 (
 "ID",
 " APIPROXY",
 " REQUESTURL",
 " REQUESTMETHOD",
 " SUMMESSAGECOUNT"
 )
 选择
         SYSUUID,
         " API_PROXY",
         " REQUEST_URL",
         " REQUEST_METHOD",
         SUM(" MESSAGE_COUNT")AS MESSAGE_COUNT
         从事实
         通过...分组
                 " API_PROXY",
                 " REQUEST_URL",
                 " REQUEST_METHOD"

 

查询摘要:不起作用

 UPSERT AGG AS AGG_TABLE <需要此参考>
 (
 "ID",
 " APIPROXY",
 " REQUESTURL",
 " REQUESTMETHOD",
 " SUMMESSAGECOUNT"
 )
 (选择
         SYSUUID,
         " API_PROXY",
         " REQUEST_URL",
         " REQUEST_METHOD",
         SUM(" MESSAGE_COUNT")AS MESSAGE_COUNT
         从事实
         通过...分组
                 " API_PROXY",
                 " REQUEST_URL",
                 " REQUEST_METHOD")AS FACT_TABLE <需要此参考>
     在哪里AGG_TABLE.APIPROXY = FACT_TABLE.API_PROXY
     <这是我需要查询的条件> 

谢谢

Shahid Akhtar。

一周热门 更多>