日期:2014-05-18  浏览次数:20468 次

请帮助各位解决我困扰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.产品编码