我有一张桌子containing FileName,CustomerName,Address,Relationship and Index。我希望为每一行分配一个序列号,但是共享相同地址的同一文件中的两个客户(主客户和二级客户)需要共享序列号,如下所示:
FILE CUSTOMER ADDRESS Relationship INDEX SEQUENCE
1 A XX Primary 1 1
1 B XX Secondary 2 1
1 C XX Primary 3 2
1 D XX Secondary 4 2
1 E XX Primary 5 3
1 F XX Secondary 6 3我尝试使用DENSE_RANK () OVER (PARTITION BY FILE, ADDRESS ORDER BY INDEX) AS SEQUENCE,但输出仍然没有如上面所示。
发布于 2018-09-24 21:05:07
您可以尝试使用lead窗口函数在子查询ORDER BY Relationship中获取下一行INDEX。
然后利用SUM窗口函数进行计算。
SELECT
"FILE",
CUSTOMER,
ADDRESS,
"INDEX",
"Relationship",
SUM(CASE WHEN "INDEX" = 'Primary' AND nextVal = 'Secondary' THEN 1 ELSE 0 END) OVER(ORDER BY "Relationship") SEQUENCE
FROM (
SELECT t1.*,lead("INDEX") OVER (PARTITION BY "FILE", ADDRESS ORDER BY "Relationship") AS nextVal
FROM T t1
) t1发布于 2018-09-24 21:21:35
我认为您可以将relationship添加到分区列中:
ROW_NUMBER() OVER (PARTITION BY FILE, ADDRESS, RELATIONSHIP ORDER BY INDEX) AS SEQUENCE请注意,它使用的是ROW_NUMBER()而不是DENSE_RANK()。领带似乎不是问题。
https://stackoverflow.com/questions/52486932
复制相似问题