declare @sql varchar(8000)
set @sql ='select 住院号,姓名,'
select @sql=@sql+'max(case when 费用名称='''+a.费用名称+''' then 金额 else 0 end),'
from 费用编码表 a
set @sql =@sql+'from t_feiyong group by 住院号,姓名' 
exec(@sql)

解决方案 »

  1.   

    declare @sql varchar(8000)
    set @sql ='select 住院号,姓名,'
    select @sql=@sql+'max(case when 费用名称='''+a.费用名称+''' then 金额 else 0 end),'
    from 费用编码表 a
    set @sql =left(@sql,len(@sql)-1)+'from t_feiyong group by 住院号,姓名' 
    exec(@sql)
      

  2.   

    declare @sql varchar(8000)
    set @sql ='select 住院号,姓名,'
    select @sql=@sql+' max(case when 费用名称='''+a.费用名称+''' then 金额 else 0 end),'
    from 费用编码表 a
    set @sql =left(@sql,len(@sql)-1)+' from t_feiyong group by 住院号,姓名' 
    exec(@sql)
      

  3.   

    用动态生成SQL的方法,不是用临时表:
    declare @sql varchar(8000)
    --生成查询的SQL语句
    set @sql='select 住院号,姓名'
    select @sql=@sql+',max(case when 费用名称='''+费用名称+''' then 金额 end) as '+费用名称
    from (select distinct 费用名称 from t_feiyong) a
    set @sql=@sql+' from t_feiyong group by 住院号,姓名'--执行生成的SQL来得到结果
    exec(@sql)
      

  4.   

    declare @sql varchar(8000)
    set @sql='select 住院号,姓名'
    select @sql=@sql+',max(case when 费用名称='''+费用名称+''' then 金额 else 0 end) ['+费用名称+']' from (select distinct 费用名称 from t_feiyong) a
    exec(@sql+' from t_feiyong group by 住院号,姓名')