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

问题描述 投票:0回答:1

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

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

enter image description here

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

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

sql-server-2008 tsql
1个回答
2
投票

使用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定义排名。

提示:不要粘贴图片!

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

© www.soinside.com 2019 - 2024. All rights reserved.