A   
  项目名   金额   票号   
  报关费   11         1   
  报检费   12         1   
  押箱费   13         1   
  报关费   11         2     
  报检费   12         2   
  押箱费   13         2   
B
  票号   报关费   报检费   押箱费   
  1           11           12           13   
  2           14           15           16  由表A查询得B(不用中间表),只用sql能否实现?
另:票号有N个
谢谢

解决方案 »

  1.   

    select 
    票号,
    报关费=sum(case when 项目名='报关费' then 金额 else 0 end),
    报检费=sum(case when 项目名='报检费' then 金额 else 0 end),
    押箱费=sum(case when 项目名='押箱费' then 金额 else 0 end)
    from A group by 票号
      

  2.   

    如果项目名固定select 票号,
      sum(case 项目名 when '报关费' then 金额 else 0 end) '报关费',
      sum(case 项目名 when '报检费' then 金额 else 0 end) '报检费',
      sum(case 项目名 when '押箱费' then 金额 else 0 end) '押箱费',
      sum(金额) 合计
    from a
    group by 票号
      

  3.   

    select  票号,
    报关费=max(case when 项目名='报关费' then 金额 end),
    报检费=max(case when 项目名='报检费' then 金额 end),
    押箱费=max(case when 项目名='押箱费' then 金额 end)
    from A表
    group by 票号
      

  4.   

    如果项目名不固定declare @sql varchar(8000)
    set @sql = 'select 票号'
    select @sql = @sql + ' , sum(case 项目名 when ''' + 项目名 + ''' then 金额 else 0 end) [' + 项目名 + ']'
    from (select distinct 项目名 from a) as t
    set @sql = @sql + ',sum(金额) 合计 from a group by 票号'
    exec(@sql)