SQL Server 2008:SQL Poser-聚合?排名分组依据



SQL Server 2008:

很抱歉标题可能没有信息,但我不太确定如何描述这个问题。我相信有一种非常巧妙(可能很明显!)的解决方法,但我就是想不出来。

无论如何,给定输入。。。

ObjectID    Field1   Field2   Field3 (actually about 10-12 fields some varchar(max)
1           x        y        z
2           x        y        z
3           x        y        b
4           x        q        r

我想给每一行附加一个键,指示它属于哪个"分组"。即,有点像你做了一个"GROUP BY Field1,Field2,Field3"。最终需要得到与此相当的信息。。。。并不是说它必须是这样的,而是"GroupID"必须是GUID而不是整数。

GroupID   ObjectID   
[guid1]       1
[guid1]       2
[guid2]       3
[guid3]       4  

(可能)需要是一个设置操作(输入可能是1000行),需要尽可能快,因为它也会经常发生。我考虑过对列值进行哈希处理,但至少有一个varchar(max)字段。。。无论如何,我也不知道是否/如何在SQL中真正做到这一点![对游标不过敏,但担心速度——而且没有好的工具来进行比较测试]。

正如我所说,一旦你知道了,这种深情可能真的很明显,但我真的无法想象,在过去的几天里,我一直在思考我的大脑。

我认为DENSE_RANK()正是您所需要的:

select DENSE_RANK() over (order by Field1, Field2, Field3 ) GroupID,
 /* insert other appropriate fields, but NOT object ID,  ^- here */
       ObjectID
from MyTable

最新更新