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

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

...全文
285 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)
内容概要:本文深入探讨了RocketMQ消息队列在计算机竞赛中的高级应用,聚焦于分布式事务解决方案(事务消息)与复杂事件处理(CEP)能力。通过“下单扣库存”这一典型场景的代码案例,详细解析了RocketMQ事务消息的“半消息”机制、本地事务执行、回查逻辑及最终一致性实现,强调其在高可靠性与复杂业务编排中的核心作用。同时介绍了死信队列、异步处理模式和容错设计等关键技术点,展现了如何利用RocketMQ构建健壮、可扩展的竞赛级系统。; 适合人群:具备一定Java和Spring Boot开发经验,熟悉微服务与消息队列基础,参与过或准备参加系统设计类计算机竞赛的研发人员或学生团队; 使用场景及目标:①解决跨服务数据一致性难题,如模拟银行转账、电商订单与库存协同;②设计具备最终一致性和高可用性的分布式系统架构,在竞赛中赢得“架构设计”高分;③掌握事务消息、回查机制、异步解耦等核心技术的实际编码与调试能力; 阅读建议:此资源以实际代码驱动理解,建议结合Spring Cloud Alibaba RocketMQ环境动手实践,重点关注TransactionListener接口的实现逻辑与网络异常下的回查机制,深入体会“半消息”在保障分布式事务中的关键价值。
下载前必看:https://renmaiwang.cn/s/bvbfw Verilog设计_串并转换 / 移位寄存器实现了一种串并转换的功能,其核心原理在于移位寄存器的运用。 这里详细展示了串转并以及并转串两种不同的设计方案。 每一种转换模式都设有专属的使能信号,同时并行输出数据的格式提供了两种选择:最低有效位优先(lsb)和最高有效位优先(msb)。 串并转换技术主要应用于串行传输与并行传输这两种数据传输模式之间的相互转换,而移位寄存器是达成这一目标的常用工具,能够支持并行及串行的数据输入与输出操作。 这些移位寄存器通常被设定为“串行输入、并行输出”(SIPO)或“并行输入、串行输出”(PISO)两种工作模式。 在串行数据输出的过程中,构成数据和字符的码元会按照既定的时间顺序逐位进行传输。 相比之下,并行数据传输则是在同一时刻将固定数量(普遍为8位或16位等)的数据和字符码元同时发送至接收端。 数据输入通常采用串行格式进行。 一旦数据成功输入寄存器,它便可以在所有输出端同时被读取,或者选择逐位移出。 寄存器中的每个触发器均设计为边沿触发类型,并且所有触发器均以特定的时钟频率协同工作。 对于每一个输入位而言,它需要经过N个时钟周期才能最终在N个输出端呈现,从而完成并行输出。 值得注意的是,在串行加载数据期间,并行输出端的数据状态应保持稳定。 数据输入则采用并行格式。 在将数据写入寄存器的操作过程中,写/移位控制线必须暂时处于非工作状态;而一旦需要执行移位操作,控制线便会变为激活状态,并且寄存器会被锁定以保持当前状态。 只要时钟周期数不超过输入数据串的长度,数据输出端Q将按照预定的顺序逐位读出并行数据,并且必须明确区分最低有效位(LSB)和最高有效位(MSB)。

34,874

社区成员

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

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