[SQL ] 以亂數排序的一種方式
資料庫名稱:MS SQL Server
資料庫版本:2008 R2
內容/問題描述:
純粹分享
假設A表是商品資料,B表是訂單,然後要Join後,亂數排序。並且排序依據是A表商品資料
取亂數順序,再用B表訂單資料取亂數順序,兩個亂數不互相影響,呈現的結果舉例如下:
商品C 訂單3
商品C 訂單1
商品C 訂單2
商品A 訂單2
商品A 訂單1
商品B 訂單2
....
商品雖然亂數排列,但是所有同樣的商品都要排在一起,然後才排訂單
綜合查詢Google後,這是我的寫法
Select * From
(
Select
商品編號, 品名
, Rank() Over (Order By Abs(CheckSum(NewId())) % 10000) As RndA From A
) VA
Inner Join
(
Select
訂單編號, 商品編號, 訂單
, Rank() Over (Order By Abs(CheckSum(NewId())) % 10000) As RndB From B
) VB On VB.商品編號 = VA.商品編號
Order By RndA, RndB
其實原本只想寫到Abs以及它包住的部分就好,但NewId函數似乎會延後到子查詢完成之後
才繼續執行,導致明明是同樣的商品,RndA的數字卻不一樣結果商品沒辦法排在一起。
突發奇想用Rank函數產生的結果是不是就不會受影響了,還好結果證實是可以的,Rand()
或NewId()和我想像的動作不同真是繞了好大圈,為什麼要弄Rand()這種假亂數呢...
或許有更好的寫法?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.18.8
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1459500976.A.D44.html
※ 編輯: Peruheru (220.134.18.8), 04/01/2016 17:04:27
推
04/05 21:00, , 1F
04/05 21:00, 1F
→
04/20 17:28, , 2F
04/20 17:28, 2F
Database 近期熱門文章
PTT數位生活區 即時熱門文章