经典SQL案例


1.       表中A、B、C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

Select(casewhena>bthenaelse b end),(casewhenb>cthenbelse c end)fromT

2.       有一张表T-Scores,记录如下比赛成绩:

Date

Name

Score

2008-08-08

拜仁

2008-08-09

奇才

2008-08-10

湖人

2008-08-11

拜仁

2008-08-12

拜仁

2008-08-13

奇才

要求输出下面的格式:

Name

拜仁

1

2

湖人

1

0

奇才

2

0

select Name,Sum(caseScoreNthen 1else0 end)as,

Sum(caseScorewhenNthen 1else0end)as

from T-ScoresGroupByName

3.       有一张表Order,记录如下:

单号

金额

RK1

10

RK2

20

RK3

-30

RK4

-10

要求输出下面格式:

单号

收入

支出

RK1

10

0

RK2

20

0

RK3

0

30

RK4

0

10

select 单号,(case金额>0then金额else 0 end)as收入,(case金额<0thenABS(金额)else 0end)fromOrder

 4.       创建一张表,记录电话呼叫员的工作流水,记录呼叫员编号、对方号码、通话开始时间、通话结束时间

--输出所有数据中通话时间最长的5条记录

select top 5 * from CallRecords

order by datediff(S,StartDateTime,EndDateTime)desc

--输出所有数据中拨打长途号码(开头为0)的总时长。

select sum(datediff(S,StartDateTime,EndDateTime))fromCallRecords

where TelNumberlike'0%'

--输出本月通话总时长最多的前三个呼叫员的编号

 select top 3 callerNumber from CallRecords

 where datediff(month,StartDateTime,EndDateTime)=0

 group by CallerNumber

 order by sum(datediff(S,StartDateTime,EndDateTime))desc

--输出本月拨打电话次数最多的前三个呼叫员编号

 select top 3 callerNumber from CallRecords

 where datediff(month,StartDateTime,EndDateTime)=0

 group by CallerNumber

 order by count(*) desc

--输出所有数据的拨号流水,并在最后一行添加总时长

select CallerNumber,TelNumber,datediff(S,StartDateTime,EndDateTime)as'通话时长'fromCallRecords

union all

select '汇总',

convert(varchar(50),sum((casewhenTelNumberlike '0%' thendatediff(S,StartDateTime,EndDateTime)else 0 end)))as'长途通话',

sum((casewhenTelNumbernot like '0%'thendatediff(S,StartDateTime,EndDateTime)else 0 end))as'市内通话'

from CallRecords

 

5.       取出表 A 中第 31 到第 40 记录(SQLServer,以自动增长的 ID 作为主键,注意:ID 可能不是连续的)

1.select top 10*fromA where idnotin(selecttop 30idfrom A)

2.select top 10*fromA where id>(selectmax(id)from(selecttop 30id from A )asA)

3.select row,namefrom(selectrow_number()over(orderbyid)asrow,namefromA)asAWithRowNumberwhererow>=31 and row<=40

 

6.       请写一个SQL 语句:从user 表中取出name 列中的起始字符是“北京”的全部记录

select * from [user] wherernamelike'北京%'

 

7.       有一职员表,字段有工卡和姓名,写出所有姓名重复的职员信息的SQL语句。

select * from test wherenamein(selectnamefromtest  group bynamehaving count(name)>1

 

8.       有两张表Table1,Table2 ,都只有一个字段。Table有数据'1','2','3','4',Table2有'1','3'.写出一句通用Sql语句将表Table1的记录同步到Table2中。

insert table2(字段)select'2'unionselect'4'

 

9.       给定表table1中有两个字段ID、LastUpdateDate。ID表示更新的事务号、LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。

select  top  ID  from  table1 order by LastUpdateData desc;

Select ID FROM table1 WhereLastUpdateDate=(SelectMAX(LastUpdateDate)FROMtable1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值