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年代でもよい)であることが必要であり、それはまた、かなり頻繁に起こるのだろうと、できるだけ速くする必要があります。私は列の値をハッシュすることを考えました - しかし、少なくとも1つのvarchar(max)フィールドがあります...いずれにせよ、SQLでそれを実際に行うかどうかはわかりません。 [カーソルにはアレルギーではなく、スピードを心配し、比較テストを実行するのに適したツールはありません。

私が言ったように、あなたがそれを知ったら、魂はおそらく本当に明白でしょうが、私は実際にはカップラの日の間に数時間、私の脳を叩いているとは思えません。

+0

あなたはいくつかの例の出力データと一致するいくつかの例の入力データを提供してもらえますか? – MatBailie

+0

上記のダミーデータがまだ実証していないものは他のデータには追加されないと思います。 – kpollock

答えて

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

+0

rank()は、この場合は –

+0

と同様に動作します。これは、連続/連続のランク番号を必要としないためです。 – kpollock