基于某些共享列创建标识符/计数器,并基于其他列单独创建

时间:2018-07-26 14:00:58

标签: sql-server-2008 tsql

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

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

enter image description here

thread中讨论了我以前的过程,但是随着我的前进,我相信最初并没有正确解释。

有没有一种方法可以创建我想要的结果?

1 个答案:

答案 0 :(得分: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定义排名。

提示:请勿粘贴图片!

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