国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

SQL生成一柱雙色球

2024-07-21 02:46:24
字體:
來源:轉載
供稿:網友
SQL生成一柱雙色球

數據庫環境:SQL SERVER 2005

以前用C/java窮舉雙色球的所有排列,今天想著換成用SQL實現,只生成一柱雙色球。

簡單說下雙色球的規則,雙色球由紅色球和藍色球組成,每注投注號碼由6個紅色球號碼和1個藍色球號碼組成。

紅色球號碼從1--33中選擇;藍色球號碼從1--16中選擇。同時,一柱號碼中,藍色球不能出現在紅色球里。

規則講完了,我們來看實現,直接上代碼,代碼里有注釋,應該都能看懂

/*生成1-33個號碼的球*/WITH    x0          AS ( SELECT   number AS ball               FROM     master.dbo.spt_values               WHERE    type = 'P'                        AND number <= 33                        AND number >= 1             ),/*隨機生成6個紅色球*/        x1          AS ( SELECT TOP 6                        ball               FROM     x0               ORDER BY NEWID()             )    SELECT  redball AS 紅色球 ,            ( /*生成藍色球*/ SELECT TOP 1                                ball                        FROM    x0                        WHERE   ball <= 16                                AND ball NOT IN ( SELECT    ball                                                  FROM      x1 )                        ORDER BY NEWID()            ) AS 藍色球    FROM    ( /*將紅色球排到一行*/ SELECT   REPLACE(( SELECT    CAST(ball AS VARCHAR)                                                        + ','                                              FROM      x1                                            FOR                                              xml PATH('')                                            ), ',', ' ') AS redball            ) t

這樣就實現了嗎???

沒有?。。?/p>

這里挖了一個坑,我們先看下意外的結果

藍色球和紅色球出現重號

問題就出現在我用cte生成隨機的6個紅色球,每次調用x1的時候,這6個數都會隨機生成,所以,才會出現這樣的結果。

問題已經查明了,我們把6個紅色球存到臨時表里頭,就不會每次調用的時候會發生改變。

更改后的SQL如下:

/*生成1-33號碼的球*/SELECT  number AS ballINTO    #t0FROM    master.dbo.spt_valuesWHERE   type = 'P'        AND number <= 33        AND number >= 1/*生成6個紅色球*/        SELECT TOP 6        ballINTO    #t1FROM    #t0ORDER BY NEWID()SELECT  redball AS 紅色球 ,        ( /*生成藍色球*/ SELECT TOP 1                            ball                    FROM    #t0                    WHERE   ball <= 16                            AND ball NOT IN ( SELECT    ball                                              FROM      #t1 )                    ORDER BY NEWID()        ) AS 藍色球FROM    ( /*將紅色球排到一行*/ SELECT   REPLACE(( SELECT    CAST(ball AS VARCHAR)                                                    + ','                                          FROM      #t1                                        FOR                                          XML PATH('')                                        ), ',', ' ') AS redball        ) t

經網友Yuanet在評論中提醒,雙色球的規則,藍色球是可以出現在紅色球中的。

因此,我對原來的代碼做一些改動,使計算結果符合雙色球的規則。

/*生成1-33個號碼的球*/WITH    x0          AS ( SELECT   number AS ball               FROM     master.dbo.spt_values               WHERE    type = 'P'                        AND number <= 33                        AND number >= 1             ),/*隨機生成6個紅色球*/        x1          AS ( SELECT TOP 6                        ball               FROM     x0               ORDER BY NEWID()             )    SELECT  redball AS 紅色球 ,            CAST(RAND()*16+1 AS INT) AS 藍色球    FROM    ( /*將紅色球排到一行*/ SELECT   REPLACE(( SELECT    CAST(ball AS VARCHAR)                                                        + ','                                              FROM      x1                                            FOR                                              XML PATH('')                                            ), ',', ' ') AS redball            ) t


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南靖县| 青铜峡市| 白城市| 尉氏县| 崇仁县| 镇沅| 锦屏县| 古田县| 错那县| 瑞昌市| 崇仁县| 隆尧县| 仪陇县| 汝州市| 营口市| 滨州市| 密山市| 那曲县| 苏尼特左旗| 沁水县| 曲麻莱县| 唐河县| 阳东县| 香格里拉县| 隆昌县| 延吉市| 涪陵区| 周至县| 昌邑市| 呼玛县| 朔州市| 渝北区| 东辽县| 宜川县| 长泰县| 芒康县| 明水县| 天长市| 巩义市| 论坛| 青铜峡市|