求用sql或者存储过程写出要求查询
zkzh(准考证号,共12位) xm(姓名) sfzh(身份证号)
030603101423 周光辉 440803780508111
040105101423 周光辉 440803780508111
060210101423 周光辉 440803780508111
040112101423 周光辉 440803780508111
010101109425 陈娟 450202801201002
010110109425 陈娟 450202801201002
010112109425 陈娟 450202801201002
010101108179 张三 350181820728326
提示:同一个姓名及身份证号可能对应一个或者多个准考证号(zkzh)。
要求:
1、 当有姓名及身份证号对应的只有一个准考证号(zkzh)时,则查询出该条信息
2、 当姓名及身份证号对应多个准考证号(zkzh)时,只需查出其中一个准考证号(这里要注意了:要求:该准考证号的第5到第6两位(表中标记红色值)对应的数值是相同姓名及身份证号对应的几个准考证号中最大值)对应的信息。
(即如果有多个准考证号的话就只要第5第6两位数值是最大的准考证号,最后要求是每个身份证号+姓名只对应有一个准考证号)
(要求查询结果)
zkzh(准考证号,共12位) xm(姓名) sfzh(身份证号)
040112101423 周光辉 440803780508111
010112109425 陈娟 450202801201002
010101108179 张三 350181820728326
如觉得题意不明,请提出来。谢谢
------解决方案--------------------
SQL code
--zkzh(准考证号,共12位) xm(姓名) sfzh(身份证号)
select *
from tb t
where not exists (select 1 from tb where xm=t.xm and sfzh=t.sfzh
and convert(int,substring(zkzh,5,2)) > convert(int,substring(t.zkzh,5,2)))
------解决方案--------------------
SQL code
select * from test a where
right(LEFT(a.zkzh,6),2)=( select max(right(LEFT(B.zkzh,6),2)) from test b where a.xm =b.xm and a.sfzh =b.sfzh )
------解决方案--------------------
SQL code
select * from test a where
SUBSTR(a.zkzh,5,2) =( select SUBSTR(b.zkzh,5,2)
from test b where a.xm =b.xm and a.sfzh =b.sfzh )