create table tttt(FCode varchar(10),FName varchar(20),FMoney money)
go
insert tttt select '001','基本工资',2000
insert tttt select '001', '奖金',3000
insert tttt select '002','奖金',2000
insert tttt select '002','基本工资',3000
go
select fcode,sum(case when fname='基本工资' then FMoney else 0 end) as 基本工资,sum(case when fname='奖金' then FMoney else 0 end) as 奖金
from tttt
group by fcode
drop table tttt

解决方案 »

  1.   

    但如果其中的FName会根据程序实际执行情况而变化,如何使SQL自动取出fname的值?
      

  2.   

    那就要用动态生成SQL语句的方法:declare @sql varchar(8000)
    set @sql='select 员工编号'
    select @sql=@sql+',sum(case when 工资条目名称='''+工资条目名称+''' then 金额 end) as ['+工资条目名称+']' from (select distinct 工资条目名称 from table1) a
    set @sql=@sql+' from table1 group by 员工编号'exec(@sql)
      

  3.   

    在sql中按上贴方法创建了一存储过程pr1,执行时exec pr1提示:服务器: 消息 203,级别 16,状态 2,过程 pr1,行 8
    名称 'select employee_code,sum(case when payroll_item_uuid='工资条目名称1' then 金额 end) as [工资条目名称1],sum(case when payroll_item_uuid='工资条目名称2'  then 金额 end) as [工资条目名称2'],sum(case when payroll_item_uuid=工资条目名称3'   then 金额 end) as ...请问语句错在哪里?
      

  4.   

    'select employee_code,sum(case when payroll_item_uuid='工资条目名称1' then 金额 end) as [工资条目名称1],sum(case when payroll_item_uuid='工资条目名称2'  then 金额 end) as [工资条目名称2'],sum(case when payroll_item_uuid=工资条目名称3'   then 
               ~~           ~~                                 ~~           ~~
    金额 end) as ...你这些地方有问题,查一下吧。
      

  5.   

    将我的存储过程贴出:CREATE PROCEDURE dbo.Gen_T_EmployeePayrollDetail 
    AS
    declare @sql varchar(8000)
    set @sql='select employee_code'
    select @sql=@sql+',sum(case when payroll_item_uuid='''+payroll_item_uuid+''' then amount end) as ['+payroll_item_uuid+']' 
    from (select distinct payroll_item_uuid from employee_payroll_item_detail) a
    set @sql=@sql+' from  employee_payroll_item_detail group into T_EmployeePayrollDetail by employee_code'
    exec @sql
    GO我想把查询的结果放到一临时表中T_EmployeePayrolDetail,数据取得的表名为Employee_Payroll_Item_Detail。执行后提示上贴的错误。请大家帮忙看一下!
      

  6.   

    http://www.csdn.net/develop/read_article.asp?id=18622
      

  7.   

    CREATE PROCEDURE dbo.Gen_T_EmployeePayrollDetail 
    AS
    declare @sql varchar(8000)
    set @sql='select employee_code'
    select @sql=@sql+',sum(case when payroll_item_uuid='''+payroll_item_uuid+''' then amount end) ['+payroll_item_uuid+']' 
    from (select distinct payroll_item_uuid from employee_payroll_item_detail) a
    set @sql=@sql+' into T_EmployeePayrollDetail from  employee_payroll_item_detail group by employee_code'
    exec (@sql)
    GO
      

  8.   

    错在你生成表的语句放错了位置.改成下面的就可以了.CREATE PROCEDURE dbo.Gen_T_EmployeePayrollDetail 
    AS
    declare @sql varchar(8000)
    set @sql='select employee_code'
    select @sql=@sql+',sum(case when payroll_item_uuid='''+payroll_item_uuid+''' then amount end) as ['+payroll_item_uuid+']' 
    from (select distinct payroll_item_uuid from employee_payroll_item_detail) a
    set @sql=@sql+' into T_EmployeePayrollDetail from  employee_payroll_item_detail group by employee_code'      --into T_EmployeePayrollDetail 应该放在from语句之前
    exec(@sql)
    GO