1

SQL Server 2008:SQL Server 2008:SQL Poser - 聚合?排行?通過...分組?

對不起,可能沒有信息標題,但我不知道如何解決這個問題。我確信有一個很好的(也許很明顯的)解決方法,但我無法想象。

反正給定的輸入...

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中實際做到這一點! [不會對遊標過敏,但會擔心速度 - 而且沒有好的工具來進行比較測試]。

正如我所說,一旦你知道了,靈魂可能是非常明顯的,但我真的無法想象,現在在coupla的日子裏,我的腦子在幾個小時的時間裏一直困擾着我。

+0

你能提供一些示例輸出數據相匹配的一些示例輸入數據? – MatBailie 2012-01-16 11:13:42

+0

我不認爲其他數據會添加上面的虛擬數據尚未證明的任何內容 - 正如以下答案所證明的那樣。 – kpollock 2012-01-17 14:28:32

回答

1

我認爲DENSE_RANK()是你需要的東西在這裏:

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

輝煌,謝謝。 – kpollock 2012-01-16 11:47:55

+0

在這種情況下,rank()也可以很好地工作 – 2012-01-16 23:18:17

+0

,因爲我不需要等級號碼是連續的/連續的。 – kpollock 2012-01-17 14:25:08