有三个表:A:仓库,物料,现有量,金额
B:仓库,物料,出库量,出库金额
C:仓库,物料,入库量,入库金额
三个表的记录各不相同,A中有的记录,B中不一定有,B中有的C不一定有,A中有的C中也不一定有;现在想将三个表按“仓库,物料,出库数量,出库金额,入库数量,入库金额,现有量,现有量金额”连接一张表,应该怎么写语句?
B:仓库,物料,出库量,出库金额
C:仓库,物料,入库量,入库金额
三个表的记录各不相同,A中有的记录,B中不一定有,B中有的C不一定有,A中有的C中也不一定有;现在想将三个表按“仓库,物料,出库数量,出库金额,入库数量,入库金额,现有量,现有量金额”连接一张表,应该怎么写语句?
表A是:仓库,物料,本期入库数量,本期入库金额,
表B是:仓库,物料,本期出库数量,本期出库金额,
表C是:仓库,物料,期末结余数量,期末结余金额
现在想将三表连成一个表:
仓库,物料,本期入库数量,本期入库金额,本期出库数量,本期出库金额,期末结余数量,期末结余金额
应该如何写这样的语句。
isnull(t.出库量,0) 出库数量 , isnull(t.出库金额,0) 出库金额,
isnull(c.入库量,0) 入库量 , isnull(c.入库金额,0) 入库金额,
isnull(t.现有量,0) 现有量 , isnull(t.金额,0) 现有金额
from
(
select isnull(a.仓库,b.仓库) 仓库,isnull(a.物料,b.物料) 物料,isnull(b.出库量,0) 出库数量,isnull(b.出库金额,0) 出库金额,isnull(a.现有量,0) 现有量,isnull(a.金额,0) 现有金额
from a full b on a.仓库 = b.仓库 and a.物料 = b.物料
) t
full join c on t.仓库 = c.仓库 and t.物料 = c.物料
表A是:仓库,物料,本期入库数量,本期入库金额,
表B是:仓库,物料,本期出库数量,本期出库金额,
表C是:仓库,物料,期末结余数量,期末结余金额
现在想将三表连成一个表:
仓库,物料,本期入库数量,本期入库金额,本期出库数量,本期出库金额,期末结余数量,期末结余金额
应该如何写这样的语句。
-------------------------------------------------------------------------------------
select isnull(t.仓库,t3.仓库) 仓库,isnull(t.物料,t3.物料) 物料,
isnull(t.本期入库数量,0) 本期入库数量,isnull(t.本期入库金额,0) 本期入库金额,
isnull(t.本期出库数量,0) 本期出库数量,isnull(t.本期出库金额,0) 本期出库金额,
isnull(t3.期末结余数量,0) 期末结余数量,isnull(t3.期末结余金额,0) 期末结余金额
from
(
select isnull(t1.仓库,t2.仓库) 仓库,isnull(t1.物料,t2.物料) 物料,
isnull(t1.本期入库数量,0) 本期入库数量,isnull(t1.本期入库金额,0) 本期入库金额,
isnull(t2.本期出库数量,0) 本期出库数量,isnull(t2.本期出库金额,0) 本期出库金额
from
(select 仓库,物料,本期入库数量=sum(本期入库数量),本期入库金额=sum(本期入库金额) from a group by 仓库,物料) t1
full join
(select 仓库,物料,本期出库数量=sum(本期出库数量),本期出库金额=sum(本期出库金额) from b group by 仓库,物料) t2
on t1.仓库 = t2.仓库 and t1.物料 = t2.物料
) t
full join
(select 仓库,物料,期末结余数量=sum(期末结余数量),期末结余金额=sum(期末结余金额) from c group by 仓库,物料) t3
on t.仓库 = t3.仓库 and t.物料 = t3.物料
union all
select 仓库 , 物料 , 0 本期入库数量 , 0 本期入库金额 , sum(本期出库数量) 本期出库数量 , sum(本期出库金额) 本期出库金额 , 0 期末结余数量 , 0 期末结余金额 from b group by 仓库,物料
union all
select 仓库 , 物料 , 0 本期入库数量 , 0 本期入库金额 , 0 本期出库数量 , 0 本期出库金额 , sum(期末结余数量) 期末结余数量 , sum(期末结余金额) 期末结余金额 from c group by 仓库,物料
--先得出B\C表的合计,再连A表
select
[仓库]=COALESCE(a.仓库,t3.仓库),
[物料]=COALESCE(a.物料,t3.物料),
[现有量]=isnull(现有量,0),
[出库量]=isnull([出库量],0),
[出库金额]=isnull(出库金额,0),
[入库量]=isnull(入库量,0),
[入库金额]=sum(入库金额,0)
from
A
full join (select
[仓库]=COALESCE(t1.仓库,t2.仓库),
[物料]=COALESCE(t1.物料,t2.物料),
[出库量]=isnull([出库量],0),
[出库金额]=isnull(出库金额,0),
[入库量]=isnull(入库量,0),
[入库金额]=sum(入库金额,0)
from
(select
仓库,
物料,
[出库量]=sum(出库量),
[出库金额]=sum(出库金额)
from
B
group by 仓库,物料
)T2
full join
(select
仓库,
物料,
[入库量]=sum(入库量),
[入库金额]=sum(入库金额)
from
C
group by 仓库,物料
)T2 on t1.仓库=t2.仓库 and t1.物料=t2.物料
)T3 on a.仓库=t3.仓库 and a.物料=t3.物料
我先将所有记录union,然后再求和。