MS SQLServerで結果セットのシャッフル

SQLServerのrand()は同一のクエリ内においては常に一定の値を返すのね。

だから、order byにランダムな値を与えてシャッフルしようと思ったら、一工夫必要。Black Rainさんという方が書いてらっしゃるのを見つけた。 こんなの

結果セットの行ごとに異なる値で、かつ時間に依存して毎度変化する値がほしいわけだから、行のidか何か(行依存成分)+RANDの値(時間依存成分)を使う。ただし、このままだと行のidに対して単調増加で意味がないから、それでタンジェントに掛けてから変動の激しい下位桁を使ってる。なるほど。

さしあたってはこれでいいかな。