--建立测试环境
Create Table TEST
(类别 Varchar(10),
 产品 Varchar(10),
 数量 Int)
--插入数据
Insert TEST Values('A','A01',10)
Insert TEST Values('A','A02',13)
Insert TEST Values('A','A03',12)
Insert TEST Values('A','A05',15)
Insert TEST Values('A','A06',11)
Insert TEST Values('B','B01',20)
Insert TEST Values('B','B02',10)
Insert TEST Values('B','B03',17)
--测试
Select * from TEST A 
Where Not Exists(Select 1 from TEST Where 类别=A.类别 And 数量>A.数量 Having Count(1)>1) 
Order By 类别,数量 Desc
--删除测试环境
Drop Table TEST
--结果
/*
类别 产品 数量
A A05 15
A A02 13
B B01 20
B B03 17
*/

解决方案 »

  1.   

    create table a (a varchar(10),b varchar(10),c int)--a类别--b产品,c--数量
    insert into a select 'a','x','1'
    insert into a select 'a','y','5'
    insert into a select 'a','z','6'
    insert into a select 'b','xx','4'
    insert into a select 'b','yy','5'
    insert into a select 'b','zz','3'
    insert into a select 'c','x2','4'
    insert into a select 'c','y2','5'
    insert into a select 'c','z1','6'
    create function max_2 (@a varchar(10),@y varchar(10))----判断函数
    returns  int
    as
    begin
    declare
    @m int,
    @n int,
    @m1 int
    select @m=max(c) from a where a=@a
    select @n=c from a where a=@a and b=@y
    if (@n=@m)
           return 1
    else
             begin
       select @m1=max(c)
       from a
       where a=@a and c != @m
             end
           if (@n=@m1)
             return 1
    return 0
    endselect a,b,c
    from a
    where dbo.max_2(a,b)=1
    order by a,c --结果
    --a y 5
    --a z 6
    --b xx 4
    --b yy 5
    --c y2 5
    --c z1 6
      

  2.   

    -----借一楼的数据:
    --建立测试环境
    Create Table TEST
    (类别 Varchar(10),
     产品 Varchar(10),
     数量 Int)
    --插入数据
    Insert TEST Values('A','A01',10)
    Insert TEST Values('A','A02',13)
    Insert TEST Values('A','A03',12)
    Insert TEST Values('A','A05',15)
    Insert TEST Values('A','A06',11)
    Insert TEST Values('B','B01',20)
    Insert TEST Values('B','B02',10)
    Insert TEST Values('B','B03',17)
    --测试
    Select * from TEST A 
    Where(Select count(*) from TEST Where 类别=A.类别 And 数量>A.数量)<2 
    Order By 类别,数量 Desc
    --删除测试环境
    Drop Table TEST
    --结果
    /*
    类别 产品 数量
    A A05 15
    A A02 13
    B B01 20
    B B03 17
    */
      

  3.   

    谢谢 paoluo(一天到晚游泳的鱼)