使用HANA SQL中的窗口函数行号分配组号

使用HANA SQL中的窗口函数行号分配组号,sql,hana,Sql,Hana,我必须在这里输入大量的文本,以允许我发布这篇文章 请忽略此文本并查看下面我的问题 我有以下带有分区的代码: SELECT rownum,"SRNUM" , "SRAnalyzeddate", "Account", "U_USD_TOTAL_POTENTIAL_NNACV", "U_USD_TOTAL_UNDEPLOYED_BACKLOG", "U_USD_TOTAL_UNDER_SUBSCRIBED", "DV_U_BUSINESS_UNIT", "CUSTOMER_SINCE", "Cont

我必须在这里输入大量的文本,以允许我发布这篇文章

请忽略此文本并查看下面我的问题

我有以下带有分区的代码:

SELECT rownum,"SRNUM" ,
"SRAnalyzeddate",
"Account",
"U_USD_TOTAL_POTENTIAL_NNACV",
"U_USD_TOTAL_UNDEPLOYED_BACKLOG",
"U_USD_TOTAL_UNDER_SUBSCRIBED", 
"DV_U_BUSINESS_UNIT",
"CUSTOMER_SINCE",
"ContractEnd",
"Segment",
"Industry",
"Territory",    
"Vertical",
"FIELD_GEO",
"FIELD_MAJOR_AREA",
"FIELD_AREA"
 FROM 
 (
select SR."NUMBER" AS "SRNUM" ,SR."U_ANALYZED_DATE" AS "SRAnalyzeddate",SR."DV_SALES_ACCOUNT" AS "Account","U_USD_TOTAL_POTENTIAL_NNACV", 
"U_USD_TOTAL_UNDEPLOYED_BACKLOG","U_USD_TOTAL_UNDER_SUBSCRIBED", "DV_U_BUSINESS_UNIT","CUSTOMER_SINCE",
acc."U_NEW_SEGMENT" AS "Segment",
acc."DV_INDUSTRY" As "Industry",
acc."DV_U_ACCOUNT_TERRITORY" As "Territory",    
acc."DV_U_VERTICAL" As "Vertical",
ter."DV_U_GEO" AS "FIELD_GEO",
ter."DV_U_MAJOR_AREA" AS "FIELD_MAJOR_AREA",
ter."DV_U_AREA" AS "FIELD_AREA",
 MAX("END_DATE") AS "ContractEnd",
 ROW_NUMBER() OVER (PARTITION BY SR."NUMBER" ORDER BY SR."DV_SALES_ACCOUNT" DESC) AS rownum
 from  "SURF_RT"."SALES_ACCOUNT" acc
left join "SURF_RT"."SALES_REQUEST" SR  on  acc."NAME" = SR."DV_SALES_ACCOUNT"
left join "SURF_RT"."SALES_CONTRACT" con on con."DV_ACCOUNT"=SR."DV_SALES_ACCOUNT"
left join "SURF_RT"."U_SALES_TERRITORY" ter on acc."DV_U_ACCOUNT_TERRITORY" = ter."U_NAME"
JOIN "SURF_RT"."U_SALES_REQUEST_ALERT_LINES" line on sr."NUMBER"=line."DV_U_SALES_REQUEST"
JOIN "SURF_RT"."SALES_PRODUCT" prod on line."U_PRODUCT_CODE"=prod."U_PRODUCT_CODE"
WHERE 
"DV_SALES_CATEGORY"='Compliance' AND SR."DV_STATE"  NOT IN ('Closed Canceled')
AND YEAR("U_ANALYZED_DATE") = '2020' AND MONTH("U_ANALYZED_DATE") IN ('1','2','3','4')
AND acc."DV_TYPE" NOT IN ('Suspect','Prospect','Inactive','Inactive-Former Customer','Vendor')
GROUP BY SR."NUMBER" ,
SR."U_ANALYZED_DATE",
SR."DV_SALES_ACCOUNT",
"U_USD_TOTAL_POTENTIAL_NNACV",
"U_USD_TOTAL_UNDEPLOYED_BACKLOG",
"U_USD_TOTAL_UNDER_SUBSCRIBED",
"DV_U_BUSINESS_UNIT",
"CUSTOMER_SINCE",
acc."U_NEW_SEGMENT",
acc."DV_INDUSTRY",
acc."DV_U_ACCOUNT_TERRITORY",   
acc."DV_U_VERTICAL",
ter."DV_U_GEO" ,
ter."DV_U_MAJOR_AREA" ,
ter."DV_U_AREA"
ORDER BY SR."DV_SALES_ACCOUNT","SRNUM",
"SRAnalyzeddate"
)
我希望单个DV_SALES_帐户的每个SRNUM都有一个不同的行号,如下所示:

SRNUM1 = rownum1
SRNUM1 = rownum1
SRNUM1 = rownum1
SRNUM2 = rownum2
SRNUM2 = rownum2
SRNUM2 = rownum2
SRNUM3 = rownum3
SRNUM3 = rownum3
SRNUM3 = rownum3
相反,我得到的是:

SRNUM1 = rownum1
SRNUM1 = rownum2
SRNUM1 = rownum3
SRNUM2 = rownum1
SRNUM2 = rownum2
SRNUM2 = rownum3
SRNUM3 = rownum1
SRNUM3 = rownum2
SRNUM3 = rownum3
我怎样才能解决这个问题? 谢谢


我在这里输入了一个占位符,因为出于某种原因,他们认为我的问题是太多的代码。

对您想要实现的目标的口头描述与您预期的输出不同。 事实上,您当前获得的输出就是您所描述的

回顾您的预期输出

似乎您希望为每个SRNUM分配每个帐户自己的编号

有了这种洞察力,就可以很容易地回到SQL并实现:

[...]
ROW_NUMBER() OVER 
 (PARTITION BY 
           SR."DV_SALES_ACCOUNT", SR."NUMBER" 
  ) AS "ACCOUNT_SALES_REQUEST_NUMBER"
[...]
您需要小心选择别名。ROWNUM是一个已经在SQL中使用的术语,它将数据库技术问题与应用程序域问题混合在一起

作为一个例子,我在这里使用了ACCOUNT\u SALES\u REQUEST\u NUMBER,这是一个很长的输入,但至少它在tin上显示了它是什么

[...]
ROW_NUMBER() OVER 
 (PARTITION BY 
           SR."DV_SALES_ACCOUNT", SR."NUMBER" 
  ) AS "ACCOUNT_SALES_REQUEST_NUMBER"
[...]