我想基于共享列创建一个计算列,但是该计算列应“重新启动”并根据第三列进行分组。
如下图所示,第1列包含属于某个实体(某种ID)的信息。第2列包含存在的记录数(1、2和3)。第3列包含实际数据(A,B或C),但三个不同的记录之间可以存在相同的值(以 第2栏)。
此thread中讨论了我以前的过程,但是随着我的前进,我相信最初并没有正确解释。
有没有一种方法可以创建我想要的结果?
答案 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
定义排名。
对于下一个问题,请按照我的示例创建一个独立的示例,以重现您的问题并添加您尝试过的代码。