存储过程怎么把几个不同的数据集写入到一个表里面

gongxu86824 2009-03-04 11:19:35
现在做的是一个进销存方面的报表,用到存储过程,大概情况如下:
有两张表:销售表,库存表。报表要显示上期结存,本期结存,本期销售。
要得到这个结果需要经过计算才能得到,本期结存和本期销售可以直接查询到,上期结存=本期结存+本期销售。
现在我想把查询到的数据集(本期结存,本期销售)和计算得出的数据集(上期结存)用存储过程写入到另外一张表里。然后再显示出来。不知道怎么做了
表结构:
库存表(产品名称,售价,成本,数量)
销售表(产品名称,售价,成本,数量)
谢谢各位了先!

...全文
264 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复

create procedure a
@begintime, @endtime --用户输入的时间段
as
--下面四个变量表示库存中的字段
declare @name 1 varchar(40)
declare @chengben1 varchar(40)
declare @shoujia 1 varchar(6)
declare @shuliang1 varchar(6)
--销售表中四个字段
declare @name 2 varchar(40)
declare @chengben1 varchar(40)
declare @shoujia 1 varchar(6)
declare @shuliang1 varchar(6)

begin
--新建一张临时表
create table #t_SoldAndStored
(
name1 varchar(40)
chengben1 varchar(40)
shoujia 1 varchar(6)
shuliang1 varchar(6)

name2 varchar(40)
chengben2 varchar(40)
shoujia 2 varchar(6)
shuliang2 varchar(6)
)

select * from kucun --查询本期结存
select *from xiaoshou where xiaoshouriqi between @begintime and @endtime --查询本期销售
--(这里是一条计算语句计算上期结存,在得到一个数据集。我还没想好怎么做)
--(然后就是把这三个数据集加入到临时表#t_SoldAndStored里面,不知道怎么做)

end



我是今天才开始接触存储过程的,有错误还请各位指出,谢谢
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dawugui 的回复:]
SQL code请给出表结构,测试数据,具体算法和结果,谢谢。
[/Quote]
用户先输入一个时间段然后查询。
库存表(产品名称,成本,入库日期,售价,库存数量)
销售表(产品名称,成本,销售日期,售价,销售数量)
上期结存=本期结存+本期销售
其实表结构本来很复杂的,我把它简化了。
dawugui 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 gongxu86824 的回复:]
引用 4 楼 ks_reny 的回复:
銷售表的結構是不是應該加上個銷售日期吧.

恩,对有销售日期,
表的结构没全写出来(字段太多了)我最关键的是想知道怎么才能把这三个数据集写入一张表,产品按名称分类
[/Quote]
如果结构都一样,逐一插入到你需要的表就是了.
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ks_reny 的回复:]
銷售表的結構是不是應該加上個銷售日期吧.
[/Quote]
恩,对有销售日期,
表的结构没全写出来(字段太多了)我最关键的是想知道怎么才能把这三个数据集写入一张表,产品按名称分类
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
三张表的字段差不多的,
ks_reny 2009-03-04
  • 打赏
  • 举报
回复
銷售表的結構是不是應該加上個銷售日期吧.
快乐_石头 2009-03-04
  • 打赏
  • 举报
回复
INSERT TB(COL,COL1,COL2...)SELECT COL,COL1,COL2... FROM TA
dawugui 2009-03-04
  • 打赏
  • 举报
回复
请给出表结构,测试数据,具体算法和结果,谢谢。
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
在线等结果,谢谢各位了!
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
再次感谢大家!结贴了。。。。
palsword 2009-03-04
  • 打赏
  • 举报
回复
用insert table (field1, field2...)
select a.field1, b.field1
from table1 a, table2 b
where a.id=b.id这种写法插入
csjtxy 2009-03-04
  • 打赏
  • 举报
回复
9楼不错
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 dawugui 的回复:]
SQL code那有那么复杂,直接统计即可,早给出数据多好,另结存数量不知道怎么算,我是直接加的.你自己更改.

select m.*,
n.*,
m.品名,
m.成本,
m.数量 + n.数量,
m.售价
from 库存表 m , 销售表 n
where m.产品名称 = n.产品名称

select m.品名 本期结存_品名,
m.成本 本期结存_成本,
m.数量 本期结存_数量,
m.售价 本期结存_售价,
n.品名 本期销售…
[/Quote]
太谢谢了,不过还差那么点,就是把这个结果写进一张表(表的结构就和上面那张进销存报表的结构一样)里面怎么做?
dawugui 2009-03-04
  • 打赏
  • 举报
回复
那有那么复杂,直接统计即可,早给出数据多好,另结存数量不知道怎么算,我是直接加的.你自己更改.

select m.*,
n.*,
m.品名,
m.成本,
m.数量 + n.数量,
m.售价
from 库存表 m , 销售表 n
where m.产品名称 = n.产品名称

select m.品名 本期结存_品名,
m.成本 本期结存_成本,
m.数量 本期结存_数量,
m.售价 本期结存_售价,
n.品名 本期销售_品名,
n.成本 本期销售_成本,
n.数量 本期销售_数量,
n.售价 本期销售_售价,
m.品名 上期结存_品名,
m.成本 上期结存_成本,
m.数量 + n.数量 上期结存_数量,
m.售价 上期结存_售价
from 库存表 m , 销售表 n
where m.产品名称 = n.产品名称

--如果存在没有销售的,使用left join
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dawugui 的回复:]
SQL code请给出表结构,测试数据,具体算法和结果,谢谢。
[/Quote]

这样吧,弄几个简单表,把业务流程简化,来解决这个问题。
现在只有库存表,销售表。
假设没有出入库操作,只有销售一个业务。
库存表
产品名称| 成本|库存量|销售价
戒指 2000 20 2500
耳环 2000 20 2500
吊坠 2000 20 2500
情侣戒指 2000 20 2500

(假设这个就是到现在为止的库存情况)



销售表
产品名称| 成本| 销售数量 |售价 |销售日期
戒指 2000 2 2500 2009-03-1
耳环 2000 2 2500 2009-03-2
吊坠 2000 2 2500 2009-03-3
情侣戒指 2000 2 2500 2008-03-4
这个就是销售情况)

现在没有入库。销售一件库存就相应少一件。上期结存=本期结存+本期销售
2009-03-1到2009-03-4这个时间段的进销存报表


进销存报表

-------------------------------------------------------------------- ---------------
本期结存 | 本期销售 | 上期结存 |
------------------------------------------------------------------- ----------------
品名| 成本| 数量| 售价 | 品名| 成本| 数量|售价 | 品名| 成本| 数量| 售价 |

戒指 2000 20 2500 戒指 2000 2 2500 戒指 2000 22 2500
耳环 2000 20 2500 耳环 2000 2 2500 耳环 2000 22 2500
吊坠 2000 20 2500 吊坠 2000 2 2500 吊坠 2000 22 2500
情侣戒指 2000 20 2500 情侣戒指 2000 2 2500 情侣戒指 2000 22 2500


palsword 2009-03-04
  • 打赏
  • 举报
回复
把三个数据集插入一个表,如果三个结果集内容是一一对应的,
可以直接用insert into table1 (field1, field2) select a.field, b.field
from table2 a, table3 b where a.id=b.id
不过你这个肯定不是这么简单的,确定数据集之间的关系最重要。
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
282841998
我的QQ
麻烦大家留QQ给我,QQ上直接截图。这样比较快
谢谢!
gongxu86824 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 palsword 的回复:]
是不是这样
库存表内容
品 名 数量 成本 售价 入库时间
1、A 5 100 200 20090101
2、B 2 99 200 20090102
3、C 3 150 200 20090303
4、A 2 100 200 20090034
销售表内容
品 名 数量 成本 售价 销售时间
1、A 5 100 200 20090201
2、B 2 99 200 20090202
3、C 3 150 200 20090203

其实我理解了一下你的业务,涉及到…
[/Quote]
嗯嗯,就是这样的,关系确实复杂
我现在想知道的不是怎么计算业务的问题,只是想知道怎么把三个数据集插入到同一张表里面,然后直接用这张表来报表。
dawugui 2009-03-04
  • 打赏
  • 举报
回复
请给出表结构,测试数据,具体算法和结果,谢谢。
palsword 2009-03-04
  • 打赏
  • 举报
回复
是不是这样
库存表内容
品 名 数量 成本 售价 入库时间
1、A 5 100 200 20090101
2、B 2 99 200 20090102
3、C 3 150 200 20090303
4、A 2 100 200 20090034
销售表内容
品 名 数量 成本 售价 销售时间
1、A 5 100 200 20090201
2、B 2 99 200 20090202
3、C 3 150 200 20090203

其实我理解了一下你的业务,涉及到入库时间的不同,销售时间的不同,
还有你要输入一个查询时间区间,而不是取到最新的数据。
会涉及到库存入库在你查询时间之后需要过滤,销售的数据是否
在你的查询时间之后,销售的那部分入库时间是否在你的查询时间之后等等,非常的复杂。
根据这些时间情况,那上期库存 != 本期库存+本期销售

我建议,你最好把实际的数据列出来,再把你的报表列清楚,这样才能方便的解决问题。
加载更多回复(4)

34,575

社区成员

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

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