有表tb1(货品,部门,数量),表内数据如下
货品    部门    数量
A       销售部  20
B       技术部  60
C       总经办  50如果用SQL语句查询得出如下结果
货品    部门    数量
A       销售部  20
A       技术部  0
A       总经办  0
B       销售部  0
B       技术部  60
B       总经办  0
C       销售部  0
C       技术部  0
C       总经办  50多谢!

解决方案 »

  1.   

    --> 测试数据:@t
    declare @t table([货品] varchar(1),[部门] varchar(6),[数量] int)
    insert @t
    select 'A','销售部',20 union all
    select 'B','技术部',60 union all
    select 'C','总经办',50select [货品],[部门] ,case [部门] when '销售部' then [数量] else 0 end as '数量' from @t
    union all
    select [货品],[部门] ,case [部门] when '技术部' then [数量] else 0 end as '数量' from @t
    union all
    select [货品],[部门] ,case [部门] when '总经办' then [数量] else 0 end as '数量' from @t---------------------
    货品 部门 数量
    A 销售部 20
    B 技术部 0
    C 总经办 0
    A 销售部 0
    B 技术部 60
    C 总经办 0
    A 销售部 0
    B 技术部 0
    C 总经办 50
      

  2.   

    select a.货品 ,b.部门, (case when a.部门 =b.部门 then a.数量 else 0 end )数量 
    from tb a,(select distinct 部门 from tb) b
      

  3.   

    ---测试数据---
    if object_id('[tb1]') is not null drop table [tb1]
    go
    create table [tb1]([货品] varchar(1),[部门] varchar(6),[数量] int)
    insert [tb1]
    select 'A','销售部',20 union all
    select 'B','技术部',60 union all
    select 'C','总经办',50
     
    ---查询---
    select a.货品,b.部门,isnull(c.数量,0) as 数量
    from
    (select distinct 货品 from tb1) a
    join
    (select distinct 部门 from tb1) b on 1=1
    left join
      tb1 c on a.货品=c.货品 and b.部门=c.部门
    order by 1---结果---
    货品   部门     数量
    ---- ------ -----------
    A    技术部    0
    A    销售部    20
    A    总经办    0
    B    技术部    60
    B    销售部    0
    B    总经办    0
    C    技术部    0
    C    销售部    0
    C    总经办    50(9 行受影响)