S2 SQL内部测试题2.doc

来源:百度知道 编辑:UC知道 时间:2024/06/22 17:59:47
程序员工资表:ProWage
字段名称 数据类型 说明
ID int 自动编号,主键
PName Char(10) 程序员姓名
Wage int 工资
创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱?
例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写T-SQL来实现如下功能:
1) 创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。
2) 创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元,至到所有程序员平均工资达到4500元。

表wages
name wage

kaka 5000
ronaldo 5500
messy 4700
lily 4500
lucy 4800

(1)

create proc addWage
@towage int
as
declare @renshu int,@addWage int,@allPeople int
begin
set @addWage=0
select @allPeople=count(*) from wages
while 1=1
begin
select @renshu=count(*) from wages where wage>=@towage
if @renshu<(@allPeople/2)
begin
update wages set wage=wage+100
set @addWage=@addWage+100
end
else
begin
break

end
end
print '共加工资'+convert(varchar(10), @addWage)+'元'
end
(2)
create proc addWage
as
declare @avgWage int,@addWage int
begin
set @addWage=0
while 1=1
begin
select @avgWage=avg(wage) from wages
if @avgWage<4500
begin
update wages set wage=w