读书人

请帮助各位解决小弟我困扰select联表有

发布时间: 2012-04-14 17:14:21 作者: rapoo

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

读书人网 >SQL Server

热点推荐