大家好。向大家请教个问题。
根据多个条件查询数据库,并根据符合条件的多少显示。如有全部满足的直接显示在第一条,如没有就显示满足条件最多的依次根据满足条件从多到少显示比如数据库中有姓名,学校,班级,年龄,籍贯。根据这五个条件进行数据库筛选。如全部满足就显示在第一条。如没有全部满足的就看有没有满足其中4条的,没有就看有没有满足3条的以此类推这个问题困扰我很久了。希望大家帮帮我。谢谢啦。

解决方案 »

  1.   

    where 姓名 like '%...%' or 学校='...' or ... order by .......
      

  2.   

    比较笨的方法:if object_id('tb') is not null
       drop table tbcreate table tb(name varchar(10),age int,province varchar(10),class varchar(10),grade varchar(10),school varchar(40))
    insert tb
    select '王冰',12,'湖南','二班','五年级','实验小学' union all
    select '张全',12,'湖南','三班','五年级','实验小学' union all
    select '李智',12,'湖北','二班','四年级','实验小学' union all
    select '陈平',13,'广东','二班','六年级','实验小学' union all
    select '胡军',15,'湖南','五班','初一年级','实验中学'
    select num+num1+num2+num3+num4+num5 numtotal,name,age,province,class,grade,school
    from
    (
    select case when name like '%王冰%' then 1 else 0 end num,
           case when age like '%12%' then 1 else 0 end num1,
           case when province like '%湖南%' then 1 else 0 end num2,
           case when class like '%二班%' then 1 else 0 end num3,
           case when grade like '%五年级%' then 1 else 0 end num4,
           case when school like '%实验小学' then 1 else 0 end num5,
           name,age,province,class,grade,school from tb
    ) a
    order by numtotal desc/*
    numtotal    name      age   province   class    grade   school
    6     王冰        12     湖南 二班 五年级 实验小学
    4     张全        12     湖南 三班 五年级 实验小学
    3     李智        12     湖北 二班 四年级 实验小学
    2     陈平        13     广东 二班 六年级 实验小学
    1     胡军        15     湖南 五班 初一年级 实验中学
    */
      

  3.   


    up 可以尝试用union来代替union all