再次开贴讨论这个SELECT 问题。

zhongminsheng 2003-10-09 11:10:47
记录号 名称 库存 日期 入库单号
1 鸡肉 100 2003-03-02 20030302
2 鸡肉 300 2003-03-03 20030303

3 排骨 300 2003-03-03 20030303

4 鸡肉 150 2003-03-04 20030304
5 鸡肉 600 2003-03-02 20030305
。。。。。。。
要求:
按入库单号排序 筛选出 数量和大于等于 参数(例如500)的最少记录(名称等于鸡肉)

例如:
我的数量参数是500的话
得出结果是1,2,4 条

我的数量参数是300的话
得出结果是1,2 条

这样的SQL怎么写?
...全文
48 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
orcale 2003-10-12
  • 打赏
  • 举报
回复
看下面的:
declare @temp table(id int,name varchar(20),ku int,date datetime,dh int)
insert @temp values(1,'jr',400,' 2003-03-02',20030302)
insert @temp values(2,'jr',300,' 2003-03-03',20030303)
insert @temp values(3,'jr',150,' 2003-03-03',20030303)
insert @temp values(6,'jr',150,' 2003-03-03',20030303)
insert @temp values(4,'pg',500,' 2003-03-04',20030303)
insert @temp values(5,'jr',600,' 2003-03-03',20030303)
declare @id int,
@value int,
@total int
create table #t (id int)
set @total=0

declare cu_1 cursor for
select a.id,a.ku from (select * from @temp where ku<=500 and name='jr') a order by a.ku desc
open cu_1
fetch next from cu_1 into @id,@value
while @@fetch_status=0
begin
set @total=@total+@value
insert into #t values(@id)
if @total>=500
fetch last from cu_1 into @id,@value
else
fetch next from cu_1 into @id,@value
end
deallocate cu_1
select * from @temp where name='jr' and id in (select id from #t)
drop table #t


orcale 2003-10-12
  • 打赏
  • 举报
回复
declare @temp table(id int,name varchar(20),ku int,date datetime,dh int)
insert @temp values(1,'jr',100,' 2003-03-02',20030302)
insert @temp values(2,'jr',300,' 2003-03-03',20030303)
insert @temp values(3,'jr',150,' 2003-03-03',20030303)
insert @temp values(4,'pg',500,' 2003-03-04',20030303)
insert @temp values(5,'jr',600,' 2003-03-03',20030303)
declare @id int,
@value int,
@total int
set @total=0
create table #t (id int)
declare cu_1 cursor for
select a.id,a.ku from (select * from @temp where ku<=500 and name='jr') a order by a.ku desc
open cu_1
fetch next from cu_1 into @id,@value
while @@fetch_status=0
begin
print @id
print @value
if @total>=500
fetch last from cu_1 into @id,@value
else
set @total=@total+@value
insert into #t values(@id)
fetch next from cu_1 into @id,@value
end
deallocate cu_1
select * from @temp where name='jr' and id in (select id from #t)
drop table #t
yunfeng007 2003-10-09
  • 打赏
  • 举报
回复
你应该先把符合条件的记录取出来,在vb中编算法来处理找到大于某个值的最少和最符合的记录的问题
viena 2003-10-09
  • 打赏
  • 举报
回复
用SQL不可以
TechnoFantasy 2003-10-09
  • 打赏
  • 举报
回复
你这不仅是SELECT的问题了,还涉及到一个排列组合的问题(找到大于某个值的最少和最符合的记录)
zhongminsheng 2003-10-09
  • 打赏
  • 举报
回复
不错继续!
笑对最好 2003-10-09
  • 打赏
  • 举报
回复
zhongminsheng (小生)的意思是按照進貨的順序來選擇,
找到從最早的紀錄開始的滿足此次發貨的數量的n條紀錄。
提供給你一個思路,
Select Count(*) From Table Where 名稱='雞肉'
然後循環@i從1到Count
select sum(庫存) from Table where 記錄號 in(select top @i 記錄號 from Table)
然後判斷是否夠數量,夠的話,跳出循環,
不夠的話繼續,呵呵!這樣應該可以了,呵呵!
snail2011 2003-10-09
  • 打赏
  • 举报
回复
那用DESC 或ASC进行排序可以吧!
zhongminsheng 2003-10-09
  • 打赏
  • 举报
回复
to : wangchong(网虫)
不是这样,我可以详细说一下目的:
如上例是我的鸡肉及其它物品入库记录,上述有四个入库批次分别是1,2,4,5
我出库时要按入库顺序进行发货,比如我要发500的话应该(order by 入库单号后)根据入库
(或在库)数量找到1,2,4三条信息(共550)供我操作。
如我要发300的话应该(order by 入库单号后)根据入库
(或在库)数量找到1,2二条信息(400)供我操作。
wangchong 2003-10-09
  • 打赏
  • 举报
回复
select 记录号,名称,库存,日期,入库单号 from table where 库存 <= "& 参数 &" and
名称 = "鸡肉" oreder by 记录号

我不知道你是不是想要这个结果??
zhongminsheng 2003-10-09
  • 打赏
  • 举报
回复
to : yunfeng007(一水寒)

如果用程序的话我就不用问了,我就不用问了。
jintianatxd 2003-10-09
  • 打赏
  • 举报
回复
关注。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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