select 
人数,
收入,
支出 ,
奖励 ,
罚款 ,
应结算工资 = 收入-支出+奖励-罚款,    
人均收入 = (收入-支出+奖励-罚款)/人数,
基金贷款,
基金存款 ,
工资调节税 ,
实际结算工资 = (收入-支出+奖励-罚款)-基金贷款+基金存款-工资调节税,   
实际人均收入 = ((收入-支出+奖励-罚款)-基金贷款+基金存款-工资调节税)/人数
from tablename

解决方案 »

  1.   

    --建立测试环境
    Create Table 表(项目 varchar(20),金额 money)
    --插入数据
    insert into 表
    select '人数',50 union
    select '收入',10000 union
    select '支出',1000 union
    select '奖励',8000 union
    select '罚款',200 union
    select '应结算工资',null union
    select '人均收入' ,null union
    select '基金贷款',3000 union
    select '基金存款',2000 union
    select '工资调节税',1000 union
    select '实际结算工资' ,null union
    select '实际人均收入',null
    --select * from 表
    --测试语句
      DECLARE @SQL VARCHAR(8000)
      declare @gs1 VARCHAR(50)
      declare @gs2 VARCHAR(50)
      declare @gs3 VARCHAR(50)
      declare @gs4 VARCHAR(50)
    SET @SQL='SELECT 1[id]'
    SELECT @SQL= @SQL+ 
    ',min(CASE WHEN 项目 = ''' + 项目 + ''' THEN 金额   END )[' + 项目 + ']'
    FROM (SELECT DISTINCT 项目 FROM 表 where 项目 not in('应结算工资 ','人均收入','实际结算工资','实际人均收入')) A
    SET @SQL=@SQL+' FROM 表'set @gs1='应结算工资 = 收入-支出+奖励-罚款,'
    set @gs1='人均收入= 应结算工资/人数,'
    set @gs1='实际结算工资 = 应结算工资-基金贷款+基金存款-工资调节税,'
    set @gs1='实际人均收入= 实际结算工资/人数'set @sql='select * ,应结算工资 = 收入-支出+奖励-罚款,
    人均收入= (收入-支出+奖励-罚款)/人数 ,
    实际结算工资=收入-支出+奖励-罚款-基金贷款+基金存款-工资调节税,
    实际人均收入=(收入-支出+奖励-罚款-基金贷款+基金存款-工资调节税)/人数 
    from ('+@sql+')a' 
    exec (@SQL)
     
    --删除测试环境
    Drop Table 表
      

  2.   

    select @sPrject='应结算工资额,人均收入,实际结算工资额,实际人均收入'SELECT DISTINCT 项目 FROM 表 where 项目 not in(@sPrject)我这样写为什么不能排除"表"里的
    '应结算工资额,人均收入,实际结算工资额,实际人均收入'各个记录,
    但是当select @sPrject='应结算工资额'
    时却能排除'应结算工资额'而这样写
    SELECT DISTINCT 项目 FROM 表 where 项目 not in('应结算工资 ','人均收入','实际结算工资','实际人均收入')
    却能排除这四个记录,
    如果我想用上面变量的方式应该怎么写呢?多谢了