解决方案 »

  1.   

     如果是只有两个仓库,直接写比较简单
    declare @t1 table (商品编号 varchar(10), 商品名称 varchar(20))
    insert @t1 
    select '001', '牙膏' union 
    select '002', '橡皮' declare @t2 table (仓库编号 varchar(10), 商品编号 varchar(10), 库存数量 int)
    insert @t2 
    select '01', '001', 2  union
    select '02', '002', 10 declare @t3 table (仓库编号 varchar(10), 仓库名称 varchar(20))
    insert @t3 
    select '01', '主仓库' union 
    select '02', '二楼仓库' 
    select a.商品编号, a.商品名称, isnull(b.主仓库,0) as 主仓库, isnull(c.二楼仓库,0) as 二楼仓库
    from @t1 a
    left join
    (
    select 商品编号, 库存数量 as 主仓库
    from @t2 
    where 仓库编号='01'
    ) b on a.商品编号 = b.商品编号
    left join
    (
    select 商品编号, 库存数量 as 二楼仓库
    from @t2 
    where 仓库编号='02' 
    ) c on a.商品编号 = c.商品编号商品编号       商品名称                 主仓库         二楼仓库        
    ---------- -------------------- ----------- ----------- 
    001        牙膏                   2           0
    002        橡皮                   0           10
      

  2.   

    参考
    精典的SQL语句(行列转换等)
    http://zjt.nbfas.cn/show.aspx?id=16&cid=8
    1. 行列转换--普通假设有张学生成绩表(CJ)如下
    Name    Subject     Result
    张三    语文        80
    张三    数学        90
    张三    物理        85
    李四    语文        85
    李四    数学        92
    李四    物理        82想变成    
    姓名   语文   数学   物理
    张三   80     90     85
    李四   85     92     82declare @sql varchar(4000)
    set @sql = 'select Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)
    主要是要把表3仓库基础表进行行列转换然后去join库存表和商品目录表
      

  3.   

    ...原理去SQL Server那边 多的是.晕.
      

  4.   

    declare @t1 table (商品编号 varchar(10), 商品名称 varchar(20))
    insert @t1 
    select '001', '牙膏' union 
    select '002', '橡皮' declare @t2 table (仓库编号 varchar(10), 商品编号 varchar(10), 库存数量 int)
    insert @t2 
    select '01', '001', 2  union
    select '02', '002', 10 declare @t3 table (仓库编号 varchar(10), 仓库名称 varchar(20))
    insert @t3 
    select '01', '主仓库' union 
    select '02', '二楼仓库' 
    ---2000静态SQL
    select  商品编号,商品名称,
    主仓库=sum(case 仓库名称 when '主仓库' then 库存数量 else 0 end),
    二楼仓库=sum(case 仓库名称 when '二楼仓库' then 库存数量 else 0 end)
    from 
    (select a.商品编号,a.商品名称,b.库存数量,c.仓库名称 
    from @t1 a join @t2 b on a.商品编号=b.商品编号 join @t3 c 
    on b.仓库编号=c.仓库编号) t 
    group by 商品编号,商品名称--2005静态SQL
    select 商品编号,商品名称,主仓库=ISNULL(主仓库,0),二楼仓库=ISNULL(二楼仓库,0) 
    from
    (select * from 
    (select a.商品编号,a.商品名称,b.库存数量,c.仓库名称 from @t1 a join @t2 b  on a.商品编号=b.商品编号 join @t3 c on b.仓库编号=c.仓库编号) a 
    pivot(sum(库存数量) for 仓库名称 in(主仓库,二楼仓库)) b
    ) t/*
    商品编号       商品名称                 主仓库         二楼仓库
    ---------- -------------------- ----------- -----------
    001        牙膏                   2           0
    002        橡皮                   0           10
    */