SQL案例

来源:互联网 发布:阿里云域名空间 编辑:程序博客网 时间:2024/05/17 08:07
1、要求查询员工的最低年龄和最高年龄,临时工和正式员工要分别查询 
select  '正式员工最高年龄',max(fage) from t_employee union all
select  '正式员工最小年龄',min(fage) from t_employee union all
select  '临时员工最高年龄',max(fage) from dbo.T_TempEmployee  union all
select  '临时员工最小年龄',min(fage) from dbo.T_TempEmployee 

2、查询每位正式员工的信息,包括工号、工资,并且在最后一行加上所有员工工资额合计。 
SELECT FNumber,FSalary FROM T_Employee
UNION ALL
SELECT '工资合计',SUM(FSalary) FROM T_Employee

3、单号   金额
Rk1     10
Rk2     20
Rk3     -30
Rk4     -10
将上面的表输出为如下的格式:
单号   收入   支出
Rk1     10       0
Rk2     20       0
Rk3      0        30
Rk4      0        10

select FNumber,
(
case 
when FAmount>0 then FAmount
else  0
end
) as 收入,
(
case 
when FAmount<0 then ABS(FAmount)
else 0
end
) as 支出
from T_Test1




4、有一张表T_Scores,记录比赛成绩
Date                 Name   Score  
2008-8-8          拜仁       胜
2008-8-9          奇才       胜
2008-8-9          湖人       胜
2008-8-10        拜仁       负
2008-8-8          拜仁       负
2008-8-12        奇才       胜
要求输出下面的格式:
Name   胜     负
拜仁    12
湖人   1 0
奇才    20
数据和参考答案见备注
注意:在中文字符串前加N,比如N’胜’

select Name,
(
case Score
when N'胜' then 1
else 0
end
) as 胜,
(
case Score
when N'负' then 1
else 0
end
) as 负
from T_Scores
select Name,
Sum(
case Score
when N'胜' then 1
else 0
end
)as 胜,
Sum(
case Score
when N'负' then 1
else 0
end) as 负
from T_Scores
group by Name

5、则根据如下规则对机试成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。
90分以上:   不加分
80-89分:   加1分
70-79分:   加2分
60-69分:   加3分
60分以下:   加5分

SELECT * FROM stuMarks  --原始成绩
DECLARE @labAvg INT
WHILE(1=1)
 BEGIN
    UPDATE stuMarks 
      SET labExam=
        CASE
            WHEN labExam<60 THEN labExam+5
            WHEN labExam between 60 AND 69 THEN labExam+3
            WHEN labExam between 70 AND 79 THEN labExam+2 
            WHEN labExam between 80 AND 89 THEN labExam+1
            ELSE labExam
        END
     SELECT @labAvg=AVG(labExam) FROM stuMarks
     IF  @labAvg>=85
           BREAK
 END
SELECT * FROM stuMarks  --加分后的成绩

原创粉丝点击