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