SAP HANA -count(*)提供不同的输出

2020-09-20 04:00发布

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

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


从(SELECT中选择计数(*)
 A.MATNR文章,
 A.WERKS网站,
 ROUND((SUM(COALESCE((CASEWHEN A.BWART IN('551','951')THEN(A.DMBTR)END),0))-SUM(COALESCE((CASEWHEN A.BWART IN('552',  '952')THEN(A.DMBTR)END),0)))))DUMP_VALUE,
 ROUND((SUM(COALESCE((CASEWHEN A.BWART IN('551','951')THEN(A.MENGE)END),0)))-SUM(COALESCE((CASEWHEN A.BWART IN('552',  '952')THEN(A.MENGE)END),0)))))DUMP_QTY
 从MSEG A
 INNERJOIN S_SITE_MASTER B ON A.WERKS = B.STORE_NO
 INNERJOIN S_PRODUCT_MASTER C ON A.MATNR = C.MATERIAL
 在A.BUDAT_MKPF> = ADD_MONTHS(NEXT_DAY(LAST_DAY(ADD_DAYS(CURRENT_DATE,-1))),-1)和A.BUDAT_MKPF <= ADD_DAYS(CURRENT_DATE,-1)和A.BWART IN('551','552  ','951','952')AND C.LEVEL2 = 10AND B.FORMAT_CD IN('1')GROUPBY A.MATNR,A.WERKS);

 输出数量为-129790 
如果我只是将子句AND B.FORMAT_CD IN('1')更改为AND B.FORMAT_CD IN(1),如下所示-
 从(选择计数(*)
 选择
 A.MATNR文章,
 A.WERKS网站,
 ROUND((SUM(COALESCE((A.BWART IN('551','951')THEN(A.DMBTR)END的情况,)0))-SUM(COALESCE((A.BWART IN('552','951')  ','952')THEN(A.DMBTR)END),0)))))DUMP_VALUE,
 ROUND((SUM(COALESCE((A.BWART IN('551','951')THEN(A.MENGE)END的情况,)))-SUM(COALESCE((A.BWART IN('552','951')  ','952')THEN(A.MENGE END),0)))))DUMP_QTY
 从MSEG A
 在A.WERKS = B.STORE_NO上INNER JOIN S_SITE_MASTER B
 IN.JOIN S_PRODUCT_MASTER C ON A.MATNR = C.MATERIAL
 在哪里A.BUDAT_MKPF> = ADD_MONTHS(NEXT_DAY(LAST_DAY(ADD_DAYS(CURRENT_DATE,-1))),-1)
 AND A.BUDAT_MKPF <= ADD_DAYS(CURRENT_DATE,-1)
 AND A.BWART IN('551','552','951','952')
 AND C.LEVEL2 = 10
 和B.FORMAT_CD IN(1)
 GROUP BY A.MATNR,A.WERKS);

 输出数-29403(正确的计数)


 B.FORMAT_CD的数据类型为NVARCHAR(3)。


 计数有何不同?
 

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

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


从(SELECT中选择计数(*)
 A.MATNR文章,
 A.WERKS网站,
 ROUND((SUM(COALESCE((CASEWHEN A.BWART IN('551','951')THEN(A.DMBTR)END),0))-SUM(COALESCE((CASEWHEN A.BWART IN('552',  '952')THEN(A.DMBTR)END),0)))))DUMP_VALUE,
 ROUND((SUM(COALESCE((CASEWHEN A.BWART IN('551','951')THEN(A.MENGE)END),0)))-SUM(COALESCE((CASEWHEN A.BWART IN('552',  '952')THEN(A.MENGE)END),0)))))DUMP_QTY
 从MSEG A
 INNERJOIN S_SITE_MASTER B ON A.WERKS = B.STORE_NO
 INNERJOIN S_PRODUCT_MASTER C ON A.MATNR = C.MATERIAL
 在A.BUDAT_MKPF> = ADD_MONTHS(NEXT_DAY(LAST_DAY(ADD_DAYS(CURRENT_DATE,-1))),-1)和A.BUDAT_MKPF <= ADD_DAYS(CURRENT_DATE,-1)和A.BWART IN('551','552  ','951','952')AND C.LEVEL2 = 10AND B.FORMAT_CD IN('1')GROUPBY A.MATNR,A.WERKS);

 输出数量为-129790 
如果我只是将子句AND B.FORMAT_CD IN('1')更改为AND B.FORMAT_CD IN(1),如下所示-
 从(选择计数(*)
 选择
 A.MATNR文章,
 A.WERKS网站,
 ROUND((SUM(COALESCE((A.BWART IN('551','951')THEN(A.DMBTR)END的情况,)0))-SUM(COALESCE((A.BWART IN('552','951')  ','952')THEN(A.DMBTR)END),0)))))DUMP_VALUE,
 ROUND((SUM(COALESCE((A.BWART IN('551','951')THEN(A.MENGE)END的情况,)))-SUM(COALESCE((A.BWART IN('552','951')  ','952')THEN(A.MENGE END),0)))))DUMP_QTY
 从MSEG A
 在A.WERKS = B.STORE_NO上INNER JOIN S_SITE_MASTER B
 IN.JOIN S_PRODUCT_MASTER C ON A.MATNR = C.MATERIAL
 在哪里A.BUDAT_MKPF> = ADD_MONTHS(NEXT_DAY(LAST_DAY(ADD_DAYS(CURRENT_DATE,-1))),-1)
 AND A.BUDAT_MKPF <= ADD_DAYS(CURRENT_DATE,-1)
 AND A.BWART IN('551','552','951','952')
 AND C.LEVEL2 = 10
 和B.FORMAT_CD IN(1)
 GROUP BY A.MATNR,A.WERKS);

 输出数-29403(正确的计数)


 B.FORMAT_CD的数据类型为NVARCHAR(3)。


 计数有何不同?
 
付费偷看设置
发送
2条回答
四川大学会员
1楼-- · 2020-09-20 04:32

您将造成这种情况的原因排除在了

 B.FORMAT_CD的数据类型为NVARCHAR(3)。

当您使用不匹配的数据类型过滤查询时,HANA将执行隐式类型转换。

这意味着,它要么将IN子句的参数转换为NVARCHAR(3),要么将FORMAT_CD列的内容转换为INTEGER(在我的测试系统上就是这种情况)。

然后根据隐式转换的结果执行过滤。

您可以使用EXPLAIN PLAN对此进行检查。

在OPERATOR_DETAILS列中,您应该找到类似于

的条目
过滤条件:TO_INT(B.FORMAT_CD)= 1 

您甚至可以通过选择TO_INT(FORMAT_CD)来检查NVARCHAR列的值在转换后的样子。

95年老男孩
2楼-- · 2020-09-20 04:26

是的,我们提出了相同的理由。 谢谢您的帮助,Lars。 :)

一周热门 更多>