急,这样的语句如何写?

wang405 2009-04-01 11:25:50
我有一个起初库存表
"KC"
字段是:编号,名称,规格,起初库存数量
一个收发记录表
"SF"
字段是:单据号,日期,类别,编号,数量
我的类别是分了“收”与“发”两种类别。
我现在是要做计算出两个结果,1收发存的汇总表、2收发存明细表,不考虑时间范围。
具体要求如下:
汇总表
1-一条SQL语句计算,而且一次到位
2-计算的结果生成一张临时表(表名最好按时间加上秒来区分,我要区分表名唯一性),
临时表的字段就是
编号、名称、起初数量、收入数量、减少数量、结存数
明细表
1-最好能一条SQL语句计算
2-计算的结果生成一张临时表(表名最好按时间加上秒来区分,我要区分表名唯一性),
临时表的字段就是(能显示产品的分组合计更好)
编号、名称、起初数量、收入数量、减少数量
请问该如何处理,谢谢!
...全文
174 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
greymouseyu 2009-04-02
  • 打赏
  • 举报
回复
测试数据:

KC表:
编号 名称 规格 起初数量
1 a aa 3
2 b bb 4
3 c cc 5
4 d dd 6
SF表:
单据号 编号 日期 类型 数量
1 1 2009-4-1 3:04:01 in 5
2 1 2009-4-2 12:04:28 out 2
3 2 2009-3-14 12:05:17 in 8
4 2 2009-3-18 12:05:32 out 3
5 2 2009-4-15 12:05:44 in 5

解决办法:

SELECT KC.[编号]
,KC.[名称]
,KC.[起初数量]
,SUM(CASE SF.[类别] WHEN 'in' THEN SF.[数量] ELSE 0 END) AS 收入数量
,SUM(CASE SF.[类别] WHEN 'out' THEN SF.[数量] ELSE 0 END) AS 减少数量
,(KC.[起初数量] + SUM(CASE SF.[类别] WHEN 'in' THEN SF.[数量] ELSE 0 END) - SUM(CASE SF.[类别] WHEN 'out' THEN SF.[数量] ELSE 0 END)) AS 结存数
FROM [SF] INNER JOIN [KC] ON SF.[编号] = [KC].[编号]
GROUP BY KC.[编号],KC.[名称],KC.[起初数量]


测试结果:
编号 名称 起初数量 收入数量 减少数量 结存数
1 a 3 5 2 6
2 b 4 13 3 14
qizhengsheng 2009-04-02
  • 打赏
  • 举报
回复
我想为了大家乐于写代码
LZ最好还是给出表结构测试数据和结果,这样大家可以提高速度
yibey84 2009-04-02
  • 打赏
  • 举报
回复
select c.编号,名称,起初数量,
收入数量 = a.数量,
减少数量 = b.数量,
结存数 = 起初数量 + a.数量 - b.数量
from kc c
left join (select 编号,sum(数量) as 数量 from sf where 类型='收' group by 编号) a on c.编号 = a.编号
left join (select 编号,sum(数量) as 数量 from sf where 类型='发' group by 编号) b on c.编号 = b.编号
group by c.编号,名称,起初数量
wang405 2009-04-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 greymouseyu 的回复:]
测试数据:

KC表:
编号 名称 规格 起初数量
1 a aa 3
2 b bb 4
3 c cc 5
4 d dd 6
SF表:
单据号 编号 日期 类型 数量
1 1 2009-4-1 3:04:01 in 5
2 1 2009-4-2 12:04:28 out 2
3 2 2009-3-14 12:05:17 in 8
4 2 2009-3-18 12:05:32 out 3
5 2 2009-4-15 12:05:44 in 5

解决办法:

SQL code
SELECT KC.[编号]
,KC.[名称]
,KC.[起初…
[/Quote]
你的貌似可以解决问题,但这个结果好像不显示所有数据。就如你给出的例子一样。期待完善!
wang405 2009-04-02
  • 打赏
  • 举报
回复
语句不能运行,我在SQL及Access上都有测试不能通过,提示语句错误。能否帮忙修正。谢谢!
-狙击手- 2009-04-01
  • 打赏
  • 举报
回复
更正一下:



select  c.编号,名称,起初数量,
收入数量 = a.数量,
减少数量 = b.数量,
结存数 = 起初数量 + a.数量 - b.数量
from kc c
left join (select 编号,sum(数量) as sl from sf where 类型='收' group by 编号) a on c.编号 = a.编号
left join (select 编号,sum(数量) as sl from sf where 类型='发' group by 编号) b on c.编号 = b.编号
group by c.编号,名称,起初数量
-狙击手- 2009-04-01
  • 打赏
  • 举报
回复

汇总表
1-一条SQL语句计算,而且一次到位
2-计算的结果生成一张临时表(表名最好按时间加上秒来区分,我要区分表名唯一性),
临时表的字段就是
编号、名称、起初数量、收入数量、减少数量、结存数 、、、

----
表你自己生成 吧


SQL如下:


select c.编号,名称,起初数量,
收入数量 = a.数量,
减少数量 = b.数量,
结存数 = 起初数量 + a.数量 - b.数量
from kc c
left join (select 编号,sum(数量) as sl from sf where 类型='收') a on c.编号 = a.编号
left join (select 编号,sum(数量) as sl from sf where 类型='发') b on c.编号 = b.编号
group by c.编号,名称,起初数量

34,587

社区成员

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

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