请教,我的出库单中的有些记录按类别进行分配,在另一张表中,有些记录却不用分配,我想问统计汇总时如何实现?

zghzzy2 2009-07-10 09:38:04
请教,我的出库单中的有些记录按类别进行分配,在另一张表中,有些记录却不用分配,我想问统计汇总时如何实现?
---------------------------------------------
不好说明白,还是举例吧.(为了方便,假定单位都是1元)
出库单结构及记录如下:
材料名称,出库数量,出库用途,出库金额
材料一,80,检验,80
材料二,200,办公,200
材料三,900,null,900
材料四,230,机台一,230
------------------------
对于上面这个出库单,前二条记录和第四条记录,已经指定出库用途了,就不用二次指定了,但是对于第三条记录,由于未指定出库用途,所以要在这个出库单进行出库过帐后,再进行指定,将900进行二次分配.(公司的目的是将材料消耗核算到机台),所以为了进行二次分配,我单加了一个表,因为出库单是不能修改的,那是原始单据呀.
第二个表结构如下,记录是对上个表第三条记录的二次分配:
材料名称,出库数量,出库用途,出库金额
材料三,100,机台二,100
材料三,200,机台三,200
材料三,500,机台四,500
材料三,100,机台五,100

这样,就将材料三的900个出库进行了二次分配,分配到了机台.

现在问题来了,进行汇总时,我如何处理两种不同的情况呢?现在有两个表,对于没有进行二次分配的记录,我要从第一个表中统计汇总数据,对于进行了二次分配的记录,就不能从第一个表中取数据了,只能从第二个表中取数据.
关键是两个表如何联接呢?
...全文
105 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tim_spac 2009-07-10
  • 打赏
  • 举报
回复
没用处,只是为了代码好看
zghzzy2 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tim_spac 的回复:]
SQL codeselect ..from (select*from tbAwhere 出库用途isnotnulland yourconditionunionselect*from tbBwhere1=1and yourcondition
)as agroupby ..修正一下
[/Quote]

为何要加一句
where 1=1 呢?道理何在?
tim_spac 2009-07-10
  • 打赏
  • 举报
回复
select .. 
from (
select *
from tbA
where 出库用途 is not null
and yourcondition
union
select *
from tbB
where 1=1
and yourcondition
) as a
group by ..
修正一下
tim_spac 2009-07-10
  • 打赏
  • 举报
回复
如果是这样:
select .. 
from (
select *
from tbA
where 出库用途 is not null
and yourcondition
union
select *
from tbB
and yourcondition
) as a
group by ..
tim_spac 2009-07-10
  • 打赏
  • 举报
回复
每次均需对全部数据进行统计么? 还是有什么条件限制?
如果有条件限制,条件涉及字段是否有索引?
zghzzy2 2009-07-10
  • 打赏
  • 举报
回复
记录数量非常大,经常一次汇总就达几千条,上万条,
用 union all 的方法可行吗?


另外,下面这种形式,是不是也会太慢呀.
select ..
from (
select *
from tbA
where 出库用途 is not null
union
select *
from tbB
) as a
group by ..
zghzzy2 2009-07-10
  • 打赏
  • 举报
回复
关键是,我统计的不是一列呀,你们看,这两个表连接后,出库数量有两列,出库金额有两列.
可以我汇总时,有的记录要从这两列汇总,有的记录要从另外的两列取数,这个如何实现呀?
zghzzy2 2009-07-10
  • 打赏
  • 举报
回复

create table tmptb (材料名称 varchar(10),出库数量 int,出库用途 varchar(10),金额 int)

insert tmptb
select '材料一',80,'检验',80 union all
select '材料二',200,'办公',200 union all
select '材料三',900,null,900 union all
select '材料四',230,'机台一',230


create table tmptb2 (材料名称 varchar(10),出库数量 int,出库用途 varchar(10),金额 int)

insert tmptb2
select '材料三',100,'机台二',100 union all
select '材料三',200,'机台三',200 union all
select '材料三',500,'机台四',500 union all
select '材料三',100,'机台五',100

select *
from tmptb

select *
from tmptb2


select *
from tmptb a left join tmptb2 b on (a.材料名称=b.材料名称)

材料名称 出库数量 出库用途 金额
---------- ----------- ---------- -----------
材料一 80 检验 80
材料二 200 办公 200
材料三 900 NULL 900
材料四 230 机台一 230

(所影响的行数为 4 行)

材料名称 出库数量 出库用途 金额
---------- ----------- ---------- -----------
材料三 100 机台二 100
材料三 200 机台三 200
材料三 500 机台四 500
材料三 100 机台五 100

(所影响的行数为 4 行)

材料名称 出库数量 出库用途 金额 材料名称 出库数量 出库用途 金额
---------- ----------- ---------- ----------- ---------- ----------- ---------- -----------
材料一 80 检验 80 NULL NULL NULL NULL
材料二 200 办公 200 NULL NULL NULL NULL
材料三 900 NULL 900 材料三 100 机台二 100
材料三 900 NULL 900 材料三 200 机台三 200
材料三 900 NULL 900 材料三 500 机台四 500
材料三 900 NULL 900 材料三 100 机台五 100
材料四 230 机台一 230 NULL NULL NULL NULL

(所影响的行数为 7 行)
jiangshun 2009-07-10
  • 打赏
  • 举报
回复
case when 就可以了啊,

case when 出库用途 is null then 表二的数据 else 表一 end
pt1314917 2009-07-10
  • 打赏
  • 举报
回复

--这样取:
select * from 表一 where isnull(出库用途,'')!=''
union all
select a.* from 表二 a,表一 b
where a.材料名称=b.材料名称 and isnull(b.出库用途,'')=''

--上面的是第一次出库的,下面是第二次出库的。
tim_spac 2009-07-10
  • 打赏
  • 举报
回复
select ..
from (
select *
from tbA
where 出库用途 is not null
union
select *
from tbB
) as a
group by ..

zghzzy2 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jiangshun 的回复:]
材料名称
不能关联吗?
[/Quote]
不是这个意思,通过材料编码可以关联.
但是关键是取数,有的记录要从第一个表取数,有的记录要从第二个表取数,我如何判断呢?
jiangshun 2009-07-10
  • 打赏
  • 举报
回复
材料名称
不能关联吗?
zghzzy2 2009-07-10
  • 打赏
  • 举报
回复
再顶次,试了下,这种方法有点慢,不知哪的原因.
有没有更好的代码呢?
vb大作业库存管理系统 货物分类、入库、出库、损耗等 基本功能 1、系统用户安全、数据安全; 2、数据增、删、改; 3、数据查询; 4、数据统计、分析; 5、相关报表。 系统功能 1、登陆,退出。 2、仓管功能:实现对管理员和仓库信息的定义和管理,包括数据的 录入、修改、删除、查询等 功能 3、入库信息管理 功能:对入库信息 进行统计编写入库单,每条入库信息还包括若干条明晰信息,即每次入库会填写一条入库单,而每条入库单可能包括多种类的商品入库,每类物品的数量、金额等信息各不相同,这些数据信息都应合适理解准确的进行记录和 维护,并便于查找或增删。 4、出库信息管理功能:与入库信息对应,也对应具有 相似功能,包括出库单的记录与维护 、出库明细的记录与维护等 。 5、打印功能:实现基本的入库出库的明晰信息的报表生成和打印。 数据库类型:access 数据库名称:kucun.mdb 所需表:管理员表 login 仓库信息表 ckinfo 库存表 store 入库单信息记录表 inroom 出库单信息记录表 outroom 入库明细表 indetail 出库明细表 outdetail 数据库设计 管理员表 login Gname,Gpwd 管理员姓名,管理员密码 仓库信息表 ckinfo SID,SName,SMan1,SMan2,SMan3 仓库ID,仓库名称,仓库管理员 入库单信息记录表 inroom 订单号 did 供货商 ghs 开单间 kdtime 操作员 czy 开单总价 kdzj 入库明细表 indetail 订单号 did 货物名称 goodsname 货物数量 goodsnum 进货单价 jhdj 进货总价 jhzj 零售单价 lsjg 仓库名称 Sname 仓管姓名 Sman 出库单信息记录表 outroom 订单号 did 收货商 shs 开单间 kdtime 操作员 czy 开单总价 kdzj 出库明细表 outdetail 订单号 did 货物名称 goodsname 货物数量 goodsnum 货物价格 hwjg 仓库名称 Sname 仓管姓名 Sman 仓库信息表 ckinfo 货物名称 goodsname 货物数量 goodsnum 进货单价 jhdj 零售单价 lsjg 仓库名称 Sname 仓管姓名 Sman 操作员 czy 入库间 rktime

34,590

社区成员

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

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