可以说是非常愚昧了。因为报表需要做个排名。就是分数一样,排名并列一路下去的。查到了dense_rank函数。dense_rank()是连续排序,有两个第一名时仍然跟着第二名。
语法示例:
select DENSE_RANK() OVER(order by [UserId]) as den_rank,* from [Order]
对的,我本来是想试试这个函数解决我的问题。结果由于没有数量关系,就是很多层次不齐的数据。我查了一张表。
SELECT TOP 200 "/BIC/Z0CGDDH", "/BIC/Z0MXHXMBH", "RECORDMODE", "/BIC/Z0CPID", "/BIC/Z0SL" , --这个我一sum它就会报错。 sum ("/BIC/Z0SL" ) as "/BIC/Z0SL" 。 "/BIC/Z0CJRQ", "UNIT", "/BIC/Z0YS", "/BIC/Z0SDFGJG", "/BIC/Z0CLQJ", "/BIC/Z0XZJG", "/BIC/Z0JE", "CURRENCY", "/BIC/Z00_PRC", "/BIC/ZMATERIAL" FROM "SAPABAP1"."/BIC/AZEZJTO0200"
十分之诧异,后来我单独sum 这一列,没有任何问题。取全部数据也没有任何问题。
Could not execute 'SELECT "/BIC/Z0MXHXMBH", sum("/BIC/Z0SL") as "/BIC/Z0SL" FROM "SAPABAP1"."/BIC/AZEZJTO0200"'
SAP DBTech JDBC: [260]: invalid column name: The column '/BIC/AZEZJTO0200./BIC/Z0MXHXMBH' is invalid in the select list because the GROUP BY clause or an aggregation function does not contain it: line 2 col 3 (at pos 10)
后来发现表里数据
都是这样,那你又取单号,又聚合它。分明是不合逻辑的。它会出来什么数据呢?应该后面加个单号分组。年轻人。
SELECT "/BIC/Z0CGDDH", sum("/BIC/Z0SL") as "/BIC/Z0SL" FROM "SAPABAP1"."/BIC/AZEZJTO0200" group by "/BIC/Z0CGDDH"
这样就解决了前面红字的问题。逻辑错误。
觉得还是可以的。小问题。慢慢来
with a as( SELECT "/BIC/Z0CGDDH", sum("/BIC/Z0SL") as "/BIC/Z0SL" FROM "SAPABAP1"."/BIC/AZEZJTO0200" group by "/BIC/Z0CGDDH" ) select DENSE_RANK() OVER(order by "/BIC/Z0SL") as "den_rank" , * from a
这个一开始我以为不对,因为group by 的数量值一直在变化。殊不知其实是表太大了。几万条。显示的是几千条。主要单纯的以为数量不会为负数,其实还真有负数。
要找到问题。既然数值不对,那你应该根据订单号,去查数据才是正确的。太年轻了
---熟悉下with a as (子查询) 这个而已。写的简单也行。练习而已