SQLServerでSELECTした結果をランダムに並び変えるSQLです。
SQLでSELECTした結果をランダムに並び変えて表示する
SQLServerでSELECTした結果をランダムに並び変えるSQLです。
ORDER BYにNewID()関数の値を使います。
生成した値をNEWID()でソート
CREATE TABLE test_table ( no INT ,name VARCHAR(20) ) INSERT INTO test_table VALUES ( 1, '太郎さん' ) INSERT INTO test_table VALUES ( 2, '次郎さん' ) INSERT INTO test_table VALUES ( 3, '三郎さん' ) INSERT INTO test_table VALUES ( 4, '四郎さん' ) INSERT INTO test_table VALUES ( 5, '五郎さん' ) SELECT * FROM test_table ORDER BY NewID() DROP TABLE test_table
1回目の実行結果は
no name 3 三郎さん 2 次郎さん 5 五郎さん 1 太郎さん 4 四郎さん
2回目の実行結果は
no name 1 太郎さん 4 四郎さん 5 五郎さん 2 次郎さん 3 三郎さん
と実行するたびに結果が変わります。
使いどころはスロットマシン
使いどころはスロットマシンなどの出目にでも使えれば良いかと言う事で以下のSQLを作って見ました。
;WITH slot AS
(
SELECT
0 AS slot_numner
UNION all
SELECT
slot_numner + 1
FROM
slot
WHERE slot.slot_numner < 999
)
SELECT
TOP 1 RIGHT( '000' + CAST( slot.slot_numner AS VARCHAR(3)), 3) AS slot_number
FROM
slot
ORDER BY
NEWID()
OPTION ( MAXRECURSION 1000 )
[/sql]
1回目の実行結果は
[text]
slot_number
062
[/text]
2回目の実行結果は
[text]
slot_number
080
[/text]
実際は当たり目の確率なども考慮しないといけませんが、ランダムに数字を出すSQLとしては目的を達成したかと。