国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 双流县| 长垣县| 宜都市| 大石桥市| 巨鹿县| 平湖市| 安远县| 灵丘县| 乌恰县| 柳江县| 微山县| 高州市| 大埔区| 宜春市| 都兰县| 东乌珠穆沁旗| 历史| 平原县| 岳阳市| 孟州市| 西城区| 旅游| 青龙| 合江县| 兴城市| 桑植县| 垣曲县| 合川市| 沧州市| 屯昌县| 锡林郭勒盟| 青海省| 右玉县| 合肥市| 鱼台县| 双流县| 兴安盟| 肃南| 江永县| 黄大仙区| 凉山|