请帮助各位解决我困扰select联表问题
表1
仓库 产品编码 结存数量
产品库 A1 10
预留库 A1 20
产品库 B1 30
预留库 B1 20
表2
产品编码 产品库结存 预留库存
A1 80 10
B1 50 5
C1 30 20
货物档案
产品编码 产品名称
A1 A产品
B1 B产品
将表1和表2合并表3
表3结构
产品编码 产品名称 全库结存 预留库存 可用结存
A1 A产品 110 20 90
B1 B产品 100 25 85
C1 C产品 30 20 10
全库结存=表1库存+表2库存
预留库存=表1预留库存+表2预留库存
可用结存=全库结存-预留库存
------解决方案--------------------select aa.产品编码,bb.产品名称,aa.产品库存,aa.预留库存,isnull(aa.产品库存,0)-isnull(aa.预留库存,0) as 可用结存
from
(
select 产品编码 ,sum(产品库存) as 产品库存,sum(预留库存) as 预留库存 from
(
SELECT 产品编码 AS 产品编码,产品库结存 AS 产品库存,预算库结存 AS 预留库存 FROM dbo.表2
UNION ALL
SELECT 产品编码 AS 产品编码,结存数量 AS 产品库存,0 AS 预留库存 FROM dbo.表1
UNION ALL
SELECT 产品编码 AS 产品编码,0 AS 产品库存,结存数量 AS 预留库存 FROM dbo.表1 WHERE 仓库='预留库'
) AS 库存 group by 产品编码
) aa inner join dbo.货物档案 bb on aa.产品编码=bb.产品编码 order by aa.产品编码
------解决方案--------------------Select Tab3.产品编码,Tab3.产品名称,
'全库结存'=(
Isnull((Select sum(Tab1.结存数量) From Tab1
Where Tab1.产品编码=Tab3.产品编码
Group By Tab1.产品编码),0)
+Tab2.产品库结存),
'预留库存'=(
Isnull((Select sum(Tab1.结存数量) From Tab1
Where Tab1.产品编码=Tab3.产品编码
And Tab1.仓库='预留库'
Group By Tab1.产品编码),0)
+Tab2.预留库存),
'可用结存'=(Isnull((Select sum(Tab1.结存数量) From Tab1
Where Tab1.产品编码=Tab3.产品编码
And Tab1.仓库='产品库'
Group By Tab1.产品编码),0)
+Tab2.产品库结存)
From Tab2,Tab3
Where Tab3.产品编码=Tab2.产品编码 GROUP BY Tab3.产品编码