根据某些共享列创建标识符/计数器,并根据其他列进行分隔

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据某些共享列创建标识符/计数器,并根据其他列进行分隔相关的知识,希望对你有一定的参考价值。

我想基于共享列创建计算列,但计算列应“重新启动”并根据第三列进行分组。

如下图所示,第1列包含属于某个实体(某种ID)的信息。第2列包含存在的记录数(1,2和3)。第3列包含实际数据(A,B或C),但三个不同记录之间可以存在相同的值(由第2列分隔)。

enter image description here

我之前的过程在这个thread中进行了讨论,但随着我的进展,我相信它最初没有正确解释。

有没有办法创造我想要的结果?

答案

使用windowing function DENSE_RANK()OVER()子句:

DECLARE @tbl TABLE(Column1 INT,Column2 INT,Column3 VARCHAR(100));
INSERT INTO @tbl VALUES(1,1,'A')
                      ,(1,2,'A') 
                      ,(1,3,'B') 
                      ,(2,1,'A') 
                      ,(2,2,'A') 
                      ,(2,3,'B') 
                      ,(3,1,'A') 
                      ,(3,2,'B') 
                      ,(3,3,'V');

SELECT *
      ,DENSE_RANK() OVER(PARTITION BY Column1 ORDER BY Column3) AS ComputedColumn
FROM @tbl;

PARTITION BY将重新启动column1中每个新值的计数器,而ORDER BY定义排名。

提示:不要粘贴图片!

对于您的下一个问题,请按照我的示例创建一个独立的示例来重现您的问题并添加您自己尝试过的代码。

以上是关于根据某些共享列创建标识符/计数器,并根据其他列进行分隔的主要内容,如果未能解决你的问题,请参考以下文章

如何根据创建标识符和最大日期的两列选择行

根据列值对行进行排名/计数

SQL 约束,以防止根据其先前值更新列

如何根据同一张表中的其他列匹配替换空值

在sql中使用case语句根据某些条件对列进行分组

Python-根据另一列的更改创建一个计数器列,然后再次启动计数器