今日小总结(复杂条件查询)

来源:互联网 发布:淘宝延长收货最多 编辑:程序博客网 时间:2024/05/16 19:33

use Test
select * from CallRecords

--1计算100天后病毒发作的日期。
print convert(varchar(50),dateadd(day,100,getdate()),111)

--2凡是入职一年以上的员工,工资增加500¥
use MyBD3
select * from T_Employee
update T_Employee set FSalary=FSalary+500 where DATEADD(YEAR,1,FInDate)<GETDATE()

--3计算1975年10月5日到现在现在相差多少年/月/日/小时?
print datediff(year,'1975-10-5',getdate())
print datediff(month,'1975-10-5',getdate())
print datediff(day,'1975-10-5',getdate())
print datediff(hour,'1975-10-5',getdate())

--4统计2008年入职的员工
select FName as 员工名 from T_Employee where YEAR(FInDate)=2008

--5输出所有数据中通话时间最长的5条记录。
use Test
select top 5 *, DATEDIFF(SECOND,StartDateTime,EndDateTime) as 通话时长 from CallRecords order by DATEDIFF(SECOND,StartDateTime,EndDateTime) desc ,CallerNumber desc

--6将结果集加入一列“通话时长(秒)”
alter table CallRecords add PhoneLone int
select * from CallRecords
update CallRecords set PhoneLone=303 where Id=1;
update CallRecords set PhoneLone=70 where Id=2;
update CallRecords set PhoneLone=180 where Id=3;
update CallRecords set PhoneLone=128 where Id=4;
update CallRecords set PhoneLone=306 where Id=5;
update CallRecords set PhoneLone=600 where Id=6;
update CallRecords set PhoneLone=69 where Id=7;
update CallRecords set PhoneLone=271 where Id=8;
update CallRecords set PhoneLone=608 where Id=9;
update CallRecords set PhoneLone=608 where Id=10;

alter table CallRecords drop column PhoneLone

delete from  CallRecords where Id>=11

select  *, DATEDIFF(SECOND,StartDateTime,EndDateTime) as 通话时长 from CallRecords order by Id asc

--90分以上优秀 80分以上良好 70分以上中等 60分以上及格  60分以下不及格
use TextSchool
 SELECT * FROM T_Score
 SELECT * FROM T_Student
 select FscoreId as 学号,FEnglish as 英语成绩,Fmath as 数学成绩,
 case
  when FEnglish>90 then '优秀'
  when FEnglish>80 then '良好'
  when FEnglish>70 then '中等'
  when FEnglish>60 then '及格'
  else '不及格'
 end as 评级
  from T_Score
 
--2、要求,查询结果集中有A B C三列,用SQL语句实现:当A列大于B列时,在C中显示A列的值否则显示B列中的值。
 create table TestCase
   (
   A int,
   B int
   )
   select * from TestCase
   insert into TestCase values(10,20)
   insert into TestCase values(100,32)
   select A,B,
   case
   when A>B then A
   else B
   end C
   from TestCase
  
--3、在订单表中,统计每个销售员的总销售金额,列出销售员名、总销售金额、称号(>6000金牌,>5500银牌,>4500铜牌,否则普通)
use Test
select * from MyOrders
select 销售员,总销售金额=SUM(销售数量*销售价格),
case
when SUM(销售数量*销售价格)>6000 then '金牌'
when SUM(销售数量*销售价格)>5500 then '银牌'
when SUM(销售数量*销售价格)>4500 then '铜牌'
else '普通'
end 称号
 from MyOrders
 group by 销售员
 
--单号   金额           
--Rk1     10
--Rk2     20
--Rk3     -30
--Rk4     -10
--将上面的表输出为如下的格式:
--单号   收入   支出
--Rk1     10       0
--Rk2     20       0
--Rk3      0        30
--Rk4      0        10

create table A
(
Number varchar(50),
Ammont float
)
insert into A values('RK1',10.00)
insert into A values('RK2',20.00)
insert into A values('RK3',-30.00)
insert into A values('RK4',-10.00)

select Number 单号,
case
when Ammont>0 then Ammont
else 0
end 收入,
case
when Ammont<=0 then ABS(Ammont)
else 0
end 支出
from A