-3

我有以下 SQL 从我的乐透表中选择中奖彩票:

SELECT TOP 1 LOTTOID, VAL0, VAL1, VAL2, VAL3, VAL4, VAL5 FROM tblLotto ORDER BY NEWID()

我现在需要编写一个查询来检查每个值,如果它匹配任一列中的 3 个数字,则将票证 ID 插入一个名为tblWinners_3

如果匹配 4 个球,则将票证 ID 插入表格tblWinners_4

我正在考虑这样做:

SELECT TOP 1 LOTTOID, VAL0, VAL1, VAL2, VAL3, VAL4, VAL5 
FROM tblLotto 
WHERE VAL0 IN (SELECT VAL0 FROM tblLotto)
ORDER BY NEWID()

问题是SELECT VAL0 FROM tblLotto它将返回多行,因此默认情况下它将从列表中获取第一行,因此不是比较和搜索的有效方法。

**tblLotto** contains all the tickets people have purchased.
**tblDraw** is the lotto draw 
**tblWinners_3** contain the IDs for tickets who have matched 3 balls.
4

1 回答 1

2

你想要这样的东西吗?

SELECT LOTTOID,
    CASE WHEN VAL0=(SELECT VAL0 FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL1=(SELECT VAL1 FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL2=(SELECT VAL2 FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL3=(SELECT VAL3 FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL4=(SELECT VAL4 FROM tblDraw) THEN 1 ELSE 0 END
    + CASE WHEN VAL5=(SELECT VAL5 FROM tblDraw) THEN 1 ELSE 0 END
    AS totalValues
INTO #tempWinners
FROM tblLotto 

INSERT INTO tblWinners_3
SELECT LOTTOID
FROM #tempWinners
WHERE totalValues = 3 AND LOTTOID not in (SELECT LOTTOID FROM tblWinners_3)

INSERT INTO tblWinners_4
SELECT LOTTOID
FROM #tempWinners
WHERE totalValues = 4 AND LOTTOID not in (SELECT LOTTOID FROM tblWinners_4)

INSERT INTO tblWinners_5
SELECT LOTTOID
FROM #tempWinners
WHERE totalValues = 5 AND LOTTOID not in (SELECT LOTTOID FROM tblWinners_5)

DROP TABLE #tempWinners

注意:我假设您的 tblDraw 具有 val0、val1、...中的值。
如果不是这种情况,例如,如果它遵循以下配置:

CREATE TABLE tblDraw (
    extractedNumber int
)

然后你会使用VALx in (SELECT extractedNumber from tblDraw)

于 2013-06-25T18:44:21.897 回答