查询最小单价的组

Dision LI 2011-07-31 09:42:58
名称 颜色 客户 价格
产品A 黄色 客户1 0.1
产品A 黄色 客户2 0.3
产品B 黄色 客户2 0.2
产品B 黄色 客户2 0.2
产品C 黄色 客户3 0.2


名称 颜色 客户 价格
产品A 黄色 客户1 0.1
产品A 黄色 客户2 0.3

怎么查询【客户1】的最小单价的那组产品【产品A】



create table tb(name varchar(5),color varchar(5),cust varchar(5), jiage float)
insert into tb
select '产品A','黄色','客户1',0.1 union
select '产品A','黄色','客户2',0.3 union
select '产品B','黄色','客户2',0.2 union
select '产品B','黄色','客户2',0.2 union
select '产品C','黄色','客户3',0.2
...全文
155 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjlazio 2011-08-03
  • 打赏
  • 举报
回复
看看,学习了。。。。
AcHerat 元老 2011-07-31
  • 打赏
  • 举报
回复

select *
from tb t
where '客户1' = (select top 1 cust from tb where name = t.name order by jiage)
Dision LI 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 cd731107 的回复:]
SQL code
select * from tb where name in
(select name from tb a
where cust='客户1'
and not exists
(select 1 from tb b where a.name=b.name and a.color=b.color and b.jiage<a.jiage))
/*
name color……
[/Quote]

谢谢
Dision LI 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 ssp2009 的回复:]
你语言表达能力太差了,搞到现在,还没说清楚你的意思,服了你
[/Quote]

名称 客户 价格
产品A 客户1 0.1
产品A 客户2 0.3
产品B 客户1 0.2
产品B 客户2 0.2
产品C 客户3 0.2
结果=>
名称 客户 价格
产品A 客户1 0.1
产品A 客户2 0.3


名称 客户 价格
产品A 客户1 0.1
产品A 客户2 0.3
产品B 客户1 0.1
产品B 客户2 0.2
产品C 客户3 0.2
结果=>
名称 客户 价格
产品A 客户1 0.1
产品A 客户2 0.3
产品B 客户1 0.1
产品B 客户2 0.2

名称 客户 价格
产品A 客户1 0.5
产品A 客户2 0.3
产品B 客户1 0.2
产品B 客户2 0.2
产品C 客户3 0.2
结果=>



客户1比客户2、客户3的单价小的那款产品的所有记录




快溜 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 ameken 的回复:]
引用 23 楼 ssp2009 的回复:
SQL code
select * from tb
where 名称=(select top 1 名称 from tb a where cust='客户一'
and exists(select 1 from tb where jiage>a.jiage) order by jiage)


SQL code

create table t……
[/Quote]
select * from tb
where [name] in (select [name] from tb
where cust= (select top 1 cust from tb order by jiage))
cd731107 2011-07-31
  • 打赏
  • 举报
回复
select * from tb where name in 
(select name from tb a
where cust='客户1'
and not exists
(select 1 from tb b where a.name=b.name and a.color=b.color and b.jiage<a.jiage))
/*
name color cust jiage
----- ----- ----- -----------------------------------------------------
产品A 黄色 客户1 0.20000000000000001
产品A 黄色 客户2 0.29999999999999999
产品B 黄色 客户1 0.10000000000000001
产品B 黄色 客户2 0.20000000000000001

(所影响的行数为 4 行)

*/
快溜 2011-07-31
  • 打赏
  • 举报
回复
你语言表达能力太差了,搞到现在,还没说清楚你的意思,服了你
yinhaichao2008 2011-07-31
  • 打赏
  • 举报
回复
select * from tb where name in( select top 1 name from tb order by jiage asc )
Dision LI 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ssp2009 的回复:]
SQL code
select * from tb
where 名称=(select top 1 名称 from tb a where cust='客户一'
and exists(select 1 from tb where jiage>a.jiage) order by jiage)
[/Quote]

create table tb([name] varchar(5),color varchar(5),cust varchar(5), jiage float)
insert into tb
select '产品A','黄色','客户1',0.2 union
select '产品A','黄色','客户2',0.3 union
select '产品B','黄色','客户1',0.1 union
select '产品B','黄色','客户2',0.2 union
select '产品C','黄色','客户3',0.2
select * from tb
where [name]=(select top 1 [name] from tb a where cust='客户1'
and exists(select 1 from tb where jiage>a.jiage) order by jiage)
==>
名称 颜色 客户 价格
产品B 黄色 客户1 0.1
产品B 黄色 客户2 0.2

想要的结果是:
名称 颜色 客户 价格
产品A 黄色 客户1 0.2
产品A 黄色 客户2 0.3
产品B 黄色 客户1 0.1
产品B 黄色 客户2 0.2

条件 【客户1】的价格比其它客户低的那款产品的数据
按这里的这个查询应该是有产品A和产品B

17楼的查询也不行
快溜 2011-07-31
  • 打赏
  • 举报
回复
select * from tb
where 名称=(select top 1 名称 from tb a where cust='客户一'
and exists(select 1 from tb where jiage>a.jiage) order by jiage)
Dision LI 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 acherat 的回复:]
开9楼是小, 开15楼是大! 楼主开大开小???
[/Quote]


伤不起,收盘了.
Dision LI 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ssp2009 的回复:]
有点明白你的意思了
假如把数据改为
名称 颜色 客户 价格
产品A 黄色 客户1 0.5
产品A 黄色 客户2 0.3
产品B 黄色 客户1 0.2
产品B 黄色 客户2 0.2
产品C 黄色 客户3 0.2

如果是上述数据,结果是不是
产品B 黄色 客户1 0.2
产品B 黄色 客户2 0.2 ?
[/Quote]
是的。

17 楼应该对了。


不好意思,说得不够清楚
AcHerat 元老 2011-07-31
  • 打赏
  • 举报
回复
开9楼是小, 开15楼是大! 楼主开大开小???
cd731107 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ameken 的回复:]
引用 11 楼 ssp2009 的回复:
不是最小吗。怎么要大于其他的了。


说错。是小于其它的
[/Quote]
被楼主绕晕了
快溜 2011-07-31
  • 打赏
  • 举报
回复
有点明白你的意思了
假如把数据改为
名称 颜色 客户 价格
产品A 黄色 客户1 0.5
产品A 黄色 客户2 0.3
产品B 黄色 客户1 0.2
产品B 黄色 客户2 0.2
产品C 黄色 客户3 0.2

如果是上述数据,结果是不是
产品B 黄色 客户1 0.2
产品B 黄色 客户2 0.2 ?
cd731107 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ameken 的回复:]
假如把数据改为
名称 颜色 客户 价格
产品A 黄色 客户1 0.5
产品A 黄色 客户2 0.3
产品B 黄色 客户2 0.2
产品B 黄色 客户2 0.2
产品C 黄色 客户3 0.2

客户1没有价格大于其它客户,那么就该没有数据
[/Quote]
select *
from tb a
where name in
(select top 1 name from tb order by jiage)
and exists
(select 1 from tb b where a.name=b.name and b.jiage>any
(select jiage from tb c where c.name<>a.name))
AcHerat 元老 2011-07-31
  • 打赏
  • 举报
回复
9楼 15楼
AcHerat 元老 2011-07-31
  • 打赏
  • 举报
回复
看9楼。。


select *
from tb
where name = (select top 1 name from tb where cust = '客户一' order by jiage desc)
Dision LI 2011-07-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ssp2009 的回复:]
不是最小吗。怎么要大于其他的了。
[/Quote]

说错。是小于其它的
cd731107 2011-07-31
  • 打赏
  • 举报
回复
要的结果是
产品A 黄色 客户1 0.1
产品A 黄色 客户2 0.3

drop table tb

create table tb(name varchar(5),color varchar(5),cust varchar(5), jiage float)
insert into tb
select '产品A','黄色','客户1',0.1 union
select '产品A','黄色','客户2',0.3 union
select '产品B','黄色','客户2',0.2 union
select '产品B','黄色','客户2',0.2 union
select '产品C','黄色','客户3',0.2


select *
from tb
where name in
(select top 1 name from tb order by jiage)
/*
name color cust jiage
----- ----- ----- --------------
产品A 黄色 客户1 0.1
产品A 黄色 客户2 0.3

(所影响的行数为 2 行)
*/
加载更多回复(13)

34,593

社区成员

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

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