这个不难啊, 这样做,例如,假设猜2个号码的 姓名name 第一个号码first 第二个号码second.... 张三 10 3 ...... .....中奖号码 5 10...查询 判断每个号码是否在中奖号码里,如果中的话则置为1,没有中的为0,最后把每位号码是否中的个数相加,就是中了几个号码 select name, (select decode(count(*),0,0,1) from tb a where a.first in (5,10) and a.name =c.name) as 第一个号码是否中奖+ (select decode(count(*),0,0,1) from tb b where b.first in (5,10) and b.name =c.name) as 第二个号码是否中奖) as 中了几个号码 from tb c不过还要看你表结构设计了
不好意思写错个字段了, select name, (select decode(count(*),0,0,1) from tb a where a.first in (5,10) and a.name =c.name) as 第一个号码是否中奖+ (select decode(count(*),0,0,1) from tb b where b.second in (5,10) and b.name =c.name) as 第二个号码是否中奖) as 中了几个号码 from tb c
测试数据:CREATE TABLE Devote ( ID NUMBER(4), DevoteNum NUMBER(4), UserId VARCHAR2(20) );-- 假定6选3吧,中奖号码为2, 3, 4 -- 全中有2人 INSERT INTO Devote VALUES(1, 2, 'User1'); INSERT INTO Devote VALUES(2, 3, 'User1'); INSERT INTO Devote VALUES(3, 4, 'User1');INSERT INTO Devote VALUES(4, 2, 'User2'); INSERT INTO Devote VALUES(5, 3, 'User2'); INSERT INTO Devote VALUES(6, 4, 'User2'); --中一个的有1人 INSERT INTO Devote VALUES(7, 1, 'User3'); INSERT INTO Devote VALUES(8, 3, 'User3'); INSERT INTO Devote VALUES(9, 5, 'User3');--中2个的有有2人 INSERT INTO Devote VALUES(10, 2, 'User4'); INSERT INTO Devote VALUES(11, 3, 'User4'); INSERT INTO Devote VALUES(12, 6, 'User4');INSERT INTO Devote VALUES(13, 3, 'User5'); INSERT INTO Devote VALUES(14, 4, 'User5'); INSERT INTO Devote VALUES(15, 6, 'User5'); 测试结果:
1 1 A
2 2 B类似啊
如果摇号出了 123456789
那么9个数全选中的人是那些 选中其中8个的那些 依次查到1
这个用写个存储过程,应该可以搞定的。
查询出指定人投注的各个数字,然后与摇号进行对比。
存储过程的参数(摇出的号,投标人,中几个号);
这样做,例如,假设猜2个号码的
姓名name 第一个号码first 第二个号码second....
张三 10 3 ......
.....中奖号码 5 10...查询 判断每个号码是否在中奖号码里,如果中的话则置为1,没有中的为0,最后把每位号码是否中的个数相加,就是中了几个号码
select name,
(select decode(count(*),0,0,1) from tb a where a.first in (5,10) and a.name =c.name) as 第一个号码是否中奖+
(select decode(count(*),0,0,1) from tb b where b.first in (5,10) and b.name =c.name) as 第二个号码是否中奖) as 中了几个号码
from tb c不过还要看你表结构设计了
select name,
(select decode(count(*),0,0,1) from tb a where a.first in (5,10) and a.name =c.name) as 第一个号码是否中奖+
(select decode(count(*),0,0,1) from tb b where b.second in (5,10) and b.name =c.name) as 第二个号码是否中奖) as 中了几个号码
from tb c
(
ID NUMBER(4),
DevoteNum NUMBER(4),
UserId VARCHAR2(20)
);-- 假定6选3吧,中奖号码为2, 3, 4
-- 全中有2人
INSERT INTO Devote VALUES(1, 2, 'User1');
INSERT INTO Devote VALUES(2, 3, 'User1');
INSERT INTO Devote VALUES(3, 4, 'User1');INSERT INTO Devote VALUES(4, 2, 'User2');
INSERT INTO Devote VALUES(5, 3, 'User2');
INSERT INTO Devote VALUES(6, 4, 'User2');
--中一个的有1人
INSERT INTO Devote VALUES(7, 1, 'User3');
INSERT INTO Devote VALUES(8, 3, 'User3');
INSERT INTO Devote VALUES(9, 5, 'User3');--中2个的有有2人
INSERT INTO Devote VALUES(10, 2, 'User4');
INSERT INTO Devote VALUES(11, 3, 'User4');
INSERT INTO Devote VALUES(12, 6, 'User4');INSERT INTO Devote VALUES(13, 3, 'User5');
INSERT INTO Devote VALUES(14, 4, 'User5');
INSERT INTO Devote VALUES(15, 6, 'User5');
测试结果:
不能是这种结构吧,id应该相当于区别每张彩票的唯一号,devotenum 应该是所有号码的集合吧,不能只存一个数字吧当然要是采用这种结构,这样实现是最好的了