SQL Server 2008: SQL Poser - агрегат?рейтинг?группа по? - PullRequest
1 голос
/ 16 января 2012

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  

(Вероятно) должна быть заданной операцией (ввод может состоять из нескольких тысяч строк), должна быть максимально быстрой, поскольку это также будет происходить довольно часто. Я думал о хэшировании значений столбцов - но есть хотя бы одно поле varchar (max) ... в любом случае, я не знаю, можно ли / как это сделать в SQL! [Не имеет аллергии на курсоры, но беспокоится о скорости - и не имеет хороших инструментов для проведения сравнительных тестов].

Как я уже сказал, когда вы знаете это, то, вероятно, действительно ощущаете душевное равновесие, но я действительно не могу думать, избивал мой мозг в течение добрых нескольких часов в течение нескольких дней.

1 Ответ

1 голос
/ 16 января 2012

Я думаю, что DENSE_RANK () - это то, что вам нужно здесь:

select DENSE_RANK() over (order by Field1, Field2, Field3 ) GroupID,
 /* insert other appropriate fields, but NOT object ID,  ^- here */
       ObjectID
from MyTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...