根据 一定条件 条件查询后,得到一些数据,然后根据 下面三个字段进一步筛选
 中文描述      字段名    数据类型      
供货状态        state     int
供货价格        price     varchar    
供货商标识       info    int 比较state的大小 要 state 最大的数据, 如果最后state最大的数据有多条相同的(就是state的值相同),
 再根据价格(最小)筛选 如果最后最小价格有多条相同数据(price的值相同),再根据供货商标识(最小)筛选  依次如此筛选!!!请问怎麽做??
用程序逻辑+sql语句实现

解决方案 »

  1.   

    也就是n级查询!!
    大致是依次保存where条件
    如第一次where是 XXXXX,那么sql就是 select * from table where XXXXX
    第二次的where是 yyyyy,那么sql就是 select * from table where (XXXXX) and (yyyyy)
    第三次的where是 zzzzz,那么sql就是 select * from table where (XXXXX) and (yyyyy) and (zzzzz)
    依次类推!!
    这里xxxxx,yyyyy,zzzzz可能是非常复杂的语句!!!
      

  2.   

    简单 select * from (select state,price from [table] where 1=1 group by state,price) where 1=1 order by state,0-price desc
    state从大到小 再price从小大大
      

  3.   

    四楼倒是一个思路,排序后Select top 1
    还有一种思路,用Max、Min结合Count
      

  4.   

    你这表数据类型有问题啊?
    价格Price的数据类型怎么是Varchar,如果你设置成这种类型了后面要做很多无用功!(至少你比较大小的时候得转化它的数据类型)建议转换成Decimal类型的数据,price字段
      

  5.   


    --获取state最大值
    declare @stateMax integer
    set @stateMax=(select MAX(state) from XXX where 1=1)--在price数据类型为decimal情况下
    declare @priceMin decimal
    set @priceMin= ( select MIN(price)
    from XXX
    where XXX.[State]=
     (select MAX(state) from XXX where 1=1) )
    --寻找最低的info
    declare @infoMin integer
    set @infoMin=(select MIN(info)
    from XXX
    where priceMin=( select MIN(price)
    from XXX
    where XXX.[State]=
     (select MAX(state) from XXX where 1=1) )
     )
     
    --result 
    select *
    from     (select *
    from XXX
    where priceMin=( select MIN(price)
    from XXX
    where XXX.[State]=
     (select MAX(state) from XXX where 1=1) )
     )
    where info=@infoMin
    依次嵌套吧!希望这段代码是对的,嗬嗬嗬……很久没像这样写过SQL了!
      

  6.   

    没什么好说,直接用SQL一层层来,或者在程序里过滤都应该没什么特别便捷的方法,不过要是数据量确实大,而且供货状态state值较少,可以加个索引在state上
      

  7.   

    一种思路,建立视图:对每个视图依次进行条件查询形成新的视图,group by 分组相同的字段 order by 进行排序