HANA SQL

  可以说是非常愚昧了。因为报表需要做个排名。就是分数一样,排名并列一路下去的。查到了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)

  后来发现表里数据

  HANA SQL_第1张图片

  都是这样,那你又取单号,又聚合它。分明是不合逻辑的。它会出来什么数据呢?应该后面加个单号分组。年轻人。

 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  (子查询) 这个而已。写的简单也行。练习而已

  

 

转载于:https://www.cnblogs.com/sakura3/p/7890702.html

你可能感兴趣的:(HANA SQL)