点击此处---> 群内免费提供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)。 计数有何不同?
您将造成这种情况的原因排除在了
当您使用不匹配的数据类型过滤查询时,HANA将执行隐式类型转换。
这意味着,它要么将IN子句的参数转换为NVARCHAR(3),要么将FORMAT_CD列的内容转换为INTEGER(在我的测试系统上就是这种情况)。
然后根据隐式转换的结果执行过滤。
您可以使用EXPLAIN PLAN对此进行检查。
在OPERATOR_DETAILS列中,您应该找到类似于
的条目您甚至可以通过选择TO_INT(FORMAT_CD)来检查NVARCHAR列的值在转换后的样子。
是的,我们提出了相同的理由。 谢谢您的帮助,Lars。 :)
一周热门 更多>