首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle为同一列中具有重复值的行分配相同的row_number。

Oracle为同一列中具有重复值的行分配相同的row_number。
EN

Stack Overflow用户
提问于 2018-09-24 20:32:38
回答 2查看 1.8K关注 0票数 1

我有一张桌子containing FileNameCustomerNameAddress,Relationship and Index。我希望为每一行分配一个序列号,但是共享相同地址的同一文件中的两个客户(主客户和二级客户)需要共享序列号,如下所示:

代码语言:javascript
运行
复制
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,但输出仍然没有如上面所示。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-24 21:05:07

您可以尝试使用lead窗口函数在子查询ORDER BY Relationship中获取下一行INDEX

然后利用SUM窗口函数进行计算。

代码语言:javascript
运行
复制
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

SQLFIDDLE

票数 0
EN

Stack Overflow用户

发布于 2018-09-24 21:21:35

我认为您可以将relationship添加到分区列中:

代码语言:javascript
运行
复制
ROW_NUMBER() OVER (PARTITION BY FILE, ADDRESS, RELATIONSHIP ORDER BY INDEX) AS SEQUENCE

请注意,它使用的是ROW_NUMBER()而不是DENSE_RANK()。领带似乎不是问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52486932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档