按类别提取部分数据的问题

jszsj 2005-11-18 04:49:07
遇到一个查询问题,请教大侠们
例如产品库一张表记录各个类别中每个产品的数量,如何提取出每个类别中产品数量最多的两种
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jszsj 2005-11-21
  • 打赏
  • 举报
回复
谢谢 paoluo(一天到晚游泳的鱼)
wangdehao 2005-11-18
  • 打赏
  • 举报
回复
-----借一楼的数据:
--建立测试环境
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
*/
kubou 2005-11-18
  • 打赏
  • 举报
回复
正確
paoluo 2005-11-18
  • 打赏
  • 举报
回复
晕,还整了个函数出来。
zzit0721 2005-11-18
  • 打赏
  • 举报
回复
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
end

select 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
churchatp1 2005-11-18
  • 打赏
  • 举报
回复
楼上的正确
paoluo 2005-11-18
  • 打赏
  • 举报
回复
--建立测试环境
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
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧