使用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"
[...]