日期:2014-05-16  浏览次数:20603 次

公司作业
程序员工资表:ProWage
字段名称   数据类型  说明
ID               int                自动编号,主键
PName    Char(10)     程序员姓名
Wage        int                 工资

1、创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到3000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于3000元为止,存储过程执行完后,最终加了多少钱?
例如:如果有百分之五十的人薪水不到3000,给所有人加薪,每次加100元,直到有一半以上的人工资大于3000元,调用存储过程后的结果如图:



2)    2、创建存储过程,查询程序员的工资大于平均工资的所有员工信息及员工工资。
------解决方案--------------------
自己转存储过程吧

create table ProWage(ID int,PName varchar(10),Wage int)
insert ProWage
select 1,'青鸟',2000 union all
select 2,'张三',1300 union all
select 3,'李四',1900 union all
select 4,'二月',3600 union all
select 5,'蓝天',2880 
--1
while (select SUM(case when Wage >=3000 then 1 else 0 end)*1.0/COUNT(*)from ProWage)<=0.5
begin
update ProWage set Wage=Wage+100
end
select * from ProWage
--2
select * from ProWage where Wage>=(select SUM(Wage)/COUNT(*)from ProWage)

------解决方案--------------------

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[IncreaseWage]    Script Date: 04/15/2014 13:48:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[IncreaseWage]
AS
BEGIN
    declare @total int 
    declare @temp int
    declare @total_wage int
    declare @avg_wage int
    select @total=COUNT(1) from [master].[dbo].[ProWage]
    select @temp=COUNT(1) from [master].[dbo].[ProWage] where Wage>=3000
    set @total_wage=0
    
while (@temp*100/@total)<50
begin
  UPDATE [master].[dbo].[ProWage]
       SET [Wage] = Wage+100
       set @total_wage = @total_wage + @total*100
       select @temp=COUNT(1) from [master].[dbo].[ProWage] where Wage>=3000
end

-- 总共加薪
select @total_wage

--加薪后的结果
select * from [master].[dbo].[ProWage]

select @avg_wage = SUM(wage)/@total from [master].[dbo].[ProWage]
--大于平均薪资的员工
select * from [master].[dbo].[ProWage] where Wage> @avg_wage
END