导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

高手请进 sql语句问题

dreamersoft 2003-01-04 11:12:19
table a
商品名称 进货时间 进货数量
a 2002-11-01 00:00:00.0 11
a 2002-11-02 00:00:00.0 34
a 2002-11-03 00:00:00.0 27
a 2002-11-04 00:00:00.0 43
b 2002-11-01 00:00:00.0 1
b 2002-11-02 00:00:00.0 10
b 2002-11-03 00:00:00.0 20
b 2002-11-04 00:00:00.0 40


要得到结果如下
商品名称 进货时间 进货数量 总进货数量
a 2002-11-01 00:00:00.0 11 11
a 2002-11-02 00:00:00.0 34 45
a 2002-11-03 00:00:00.0 27 72
a 2002-11-04 00:00:00.0 43 115
b 2002-11-01 00:00:00.0 1 1
b 2002-11-02 00:00:00.0 10 11
b 2002-11-03 00:00:00.0 20 32
b 2002-11-04 00:00:00.0 40 72
...全文
8 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
happydreamer 2003-01-06
改为

select d.Goods,max(d.TheDate) as maxdate into #tmp
from
(
select l.Goods,l.TheDate,l.Quantity, sum(r.Quantity) as q_sum
from test l
join test r
on l.TheDate >= r.TheDate and l.Goods=r.Goods
group by l.Goods,l.TheDate, l.Quantity
) as d

group by d.Goods

----
a 2002-11-04 00:00:00.000
b 2002-11-04 00:00:00.000
c 2002-11-05 00:00:00.000


然后再
select ll.Goods,max(ll.TheDate),ll.q_sum from
#tmp r,
(
select l.Goods,l.TheDate,l.Quantity, sum(r.Quantity) as q_sum
from test l
join test r
on l.TheDate >= r.TheDate and l.Goods=r.Goods
group by l.Goods,l.TheDate, l.Quantity
) as ll

where ll.Goods=r.Goods and ll.TheDate =r.maxdate
group by ll.Goods,ll.q_sum
order by ll.Goods,ll.q_sum

----
a 2002-11-04 00:00:00.000 95
b 2002-11-04 00:00:00.000 72
c 2002-11-05 00:00:00.000 20
回复
nbcdl 2003-01-06
这个解决办法有问题
比如加上
c 2002-11-04 00:00:00 10 20
c 2002-11-05 00:00:00 10 30
select * from #tmp
where TheDate in (select max(TheDate) from #tmp group by Goods)
就不是最新的了

回复
happydreamer 2003-01-05
to dreamersoft
关于你发消息提到要选出商品最新进货数量和总进货量的的方法

先把上面的结果导到临时表 再
select * from #tmp
where TheDate in (select max(TheDate) from #tmp group by Goods)

结果
---
a 2002-11-04 00:00:00.000 43 115
b 2002-11-04 00:00:00.000 40 72
回复
xzgtliu 2003-01-05
代码看不到了,系统是否有问题?
回复
happydreamer 2003-01-04
不好意思 所有insert history 改为 insert test 呵呵,刚才测试的时候表名搞错了
回复
dreamersoft 2003-01-04
呵呵 不好意思 要求没写清楚 总进货数量是按商品类别统计到各天为止的的进货总数,happydreamer的答案对的,还有其他更好的方法么?谢了各位的支持
回复
happydreamer 2003-01-04
CREATE TABLE [test] (
商品名称 char(8),
进货时间 datetime NULL ,
进货数量 int NULL
) ON [PRIMARY]


INSERT HISTORY VALUES('a','2002-11-01 00:00:00.0',11)
GO
INSERT HISTORY VALUES('a','2002-11-02 00:00:00.0',34)
GO
INSERT HISTORY VALUES('a','2002-11-03 00:00:00.0',27)
GO
INSERT HISTORY VALUES('a','2002-11-04 00:00:00.0',43)
GO
INSERT HISTORY VALUES('b','2002-11-01 00:00:00.0',1)
GO
INSERT HISTORY VALUES('b','2002-11-02 00:00:00.0',10)
GO
INSERT HISTORY VALUES('b','2002-11-03 00:00:00.0',21)
GO
INSERT HISTORY VALUES('b','2002-11-04 00:00:00.0',40)
GO


select l.商品名称,l.进货时间,l.进货数量, sum(r.进货数量 ) as 总进货数量
from test l
join test r
on l.进货时间 >= r.进货时间 and l.商品名称=r.商品名称
group by l.商品名称,l.进货时间, l.进货数量
order by l.商品名称,l.进货时间
回复
日总是我哥 2003-01-04
为什么会有这样的需求?????我看了半天才看懂:(

是不是可以换在种方式 ??
中间插播广告:)

-----------------------------------------------------------------
欢迎访问:http://CoolSlob.fykj.com/
本站◆第一主打:《查询利器》,在这里你可以查询CSDN FAQ---目前唯一可查询的站点(CSDN自身也不支持)
  ◆第二主打:《CSDN精华贴》,在这里你可以看到网友们出奇的搞笑本领;可以看到网友们高深莫测的技术功底:)
  ◆第三主打:《下载专区》,在这里你可以下载到C++ Primer 3rd这样的经典书籍,可以下载到够Inside的《Insdie SQL Server7.0》,前些时候,我本人就是借助这本书来破解MS SQL Server数据库的.mdf和.ldf文件的:)
  ◆只要有大家的支持,网站有可能加入搜索“CSDN精华贴”功能!
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告