下面的代码  为什么不对啊  我查询兑奖级别 = 5  可是 第一条 和第二条 都对了4个号 为什么没显示出来?
IF object_id('tempdb..#tb') IS NOT NULL DROP TABLE #tb
go
 
CREATE TABLE #tb(h1 char(2),h2 char(2),h3 char(2),h4 char(2),h5 char(2),h6 char(2),h7 CHAR(2))
INSERT #tb
SELECT '05', '06', '12', '14', '19', '23', '05' union ALL  --这条查不出来
SELECT '02', '12', '15', '23', '24', '32', '09' union ALL  --还有这条也查不出来
SELECT '02', '14', '15', '19', '23', '24', '12' union ALL  --这条可以 
SELECT '02', '12', '14', '19', '28', '33', '10' union ALL  --这条也可以
SELECT '05', '06', '08', '09', '12', '13', '05' union ALL
SELECT '00', '00', '00', '00', '00', '00', '05'
GO
 
--sql:
DECLARE @兑奖号码 VARCHAR(100), @兑奖级别 INT
SELECT @兑奖号码 = '02,12,14,19,23,24,05', @兑奖级别 =5
 
SELECT h1,h2,h3,h4,h5,h6,h7
FROM
(
    SELECT
        兑奖级别 = 
        CASE
            WHEN (红球数量=6 AND 蓝球数量=1) THEN 1
            WHEN (红球数量=6) THEN 2
            WHEN (红球数量=5 AND 蓝球数量=1) THEN 3
            WHEN ((红球数量=5) OR (红球数量=4 AND 蓝球数量=1)) THEN 4
            WHEN ((红球数量=4) OR (红球数量=3 AND 蓝球数量=1)) THEN 5
            WHEN ((红球数量=2 AND 蓝球数量=1) OR (红球数量=1 AND 蓝球数量=1) OR (蓝球数量=1)) THEN 6    --这儿可以简化成:蓝球数量=1
            ELSE 0      
        END,
        h1,h2,h3,h4,h5,h6,h7
    FROM
    (
        SELECT
            红球数量 = (CASE WHEN h1 = SUBSTRING(@兑奖号码, 1, 2) THEN 1 ELSE 0 END)
                    +(CASE WHEN h2 = SUBSTRING(@兑奖号码, 4, 2) THEN 1 ELSE 0 END)
                    +(CASE WHEN h3 = SUBSTRING(@兑奖号码, 7, 2) THEN 1 ELSE 0 END)
                    +(CASE WHEN h4 = SUBSTRING(@兑奖号码, 10, 2) THEN 1 ELSE 0 END)
                    +(CASE WHEN h5 = SUBSTRING(@兑奖号码, 13, 2) THEN 1 ELSE 0 END)
                    +(CASE WHEN h6 = SUBSTRING(@兑奖号码, 16, 2) THEN 1 ELSE 0 END),
            蓝球数量 = (CASE WHEN h7 = SUBSTRING(@兑奖号码, 19, 2) THEN 1 ELSE 0 END),
            h1,h2,h3,h4,h5,h6,h7
        FROM #tb
    ) t
) m
WHERE 兑奖级别 = @兑奖级别
脚本sql

解决方案 »

  1.   


     FROM
        (
            SELECT
                红球数量 = (CASE WHEN h1 = SUBSTRING(@兑奖号码, 1, 2) THEN 1 ELSE 0 END)
                        +(CASE WHEN h2 = SUBSTRING(@兑奖号码, 4, 2) THEN 1 ELSE 0 END)
                        +(CASE WHEN h3 = SUBSTRING(@兑奖号码, 7, 2) THEN 1 ELSE 0 END)
                        +(CASE WHEN h4 = SUBSTRING(@兑奖号码, 10, 2) THEN 1 ELSE 0 END)
                        +(CASE WHEN h5 = SUBSTRING(@兑奖号码, 13, 2) THEN 1 ELSE 0 END)
                        +(CASE WHEN h6 = SUBSTRING(@兑奖号码, 16, 2) THEN 1 ELSE 0 END),
                蓝球数量 = (CASE WHEN h7 = SUBSTRING(@兑奖号码, 19, 2) THEN 1 ELSE 0 END),
                h1,h2,h3,h4,h5,h6,h7
            FROM #tb
        ) t
    这一段错了。你这个算,就是按顺序来的匹配的,所以第一和第二行是显示不了
      

  2.   

    那怎么解决呢?循环判断么?SQL脚本不是很熟悉 循环几乎没用过 有人能帮忙改下么?或者提示下 怎么改 谢谢了
      

  3.   

    改成这样 只显示出 第二条 和第四条        SELECT
                红球数量 = (CASE WHEN CHARINDEX(','+h1+',',','+@兑奖号码+',')>0 THEN 1 ELSE 0 END)
                        +(CASE WHEN CHARINDEX(','+h2+',',','+@兑奖号码+',')>0 THEN 1 ELSE 0 END)
                        +(CASE WHEN CHARINDEX(','+h3+',',','+@兑奖号码+',')>0 THEN 1 ELSE 0 END)
                        +(CASE WHEN CHARINDEX(','+h4+',',','+@兑奖号码+',')>0 THEN 1 ELSE 0 END)
                        +(CASE WHEN CHARINDEX(','+h5+',',','+@兑奖号码+',')>0 THEN 1 ELSE 0 END)
                        +(CASE WHEN CHARINDEX(','+h6+',',','+@兑奖号码+',')>0 THEN 1 ELSE 0 END),
                蓝球数量 = (CASE WHEN h7 = SUBSTRING(@兑奖号码, 19, 2) THEN 1 ELSE 0 END),
                h1,h2,h3,h4,h5,h6,h7
            FROM #tb