我想创建一个基于共享的列计算列,但在计算列应该“重启”和基于第三列进行分组。
如下面所列在图象描述1包含属于所以一定实体(某种ID的)的信息。 柱2包含的记录存在(1,2和3)的数目。 塔3包含实际的数据(A,B或C),但相同的值可以在三种不同的记录(由柱2分离)之间存在。
我以前的过程在这个讨论主题 ,但我就跟着去了,我相信,这是不正确的最初解释。
有没有一种方法来创建我想要的结果?
我想创建一个基于共享的列计算列,但在计算列应该“重启”和基于第三列进行分组。
如下面所列在图象描述1包含属于所以一定实体(某种ID的)的信息。 柱2包含的记录存在(1,2和3)的数目。 塔3包含实际的数据(A,B或C),但相同的值可以在三种不同的记录(由柱2分离)之间存在。
我以前的过程在这个讨论主题 ,但我就跟着去了,我相信,这是不正确的最初解释。
有没有一种方法来创建我想要的结果?
使用窗口函数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
定义的排名。
为了您的下一个问题请按照我的例子来创建一个单独的例子重现你的问题,然后添加你试过自己的代码。