posts - 89,  comments - 98,  trackbacks - 0
1,现有表bill和表payment结构如下,两表通过pay_id关联:
bill表――bill_id是帐单标识,charge为帐单金额,pay_id为付款编号,PK:bill_id
bill_id INTEGER
charge INTEGER
pay_id INTEGER

payment表――pay_id为付款编号,charge为付款金额,PK:pay_id
pay_id INTEGER
charge INTEGER

要求更新payment使charge=bill表中同一pay_id的charge之和。

2、表A定义如下:
属性 类型
Year Integer
Quarter Varchar(30)
Amount float

Year Quarter Amount
2000 1 1.1
2000 2 1.2
2000 3 1.3
2000 4 1.4
2001 1 2.1
2001 2 2.2
2001 3 2.3
2001 4 2.4
其中每行表表示一个季度的数据。

如果处理表A中的数据,得到如下的结果。
Year Quarter1 Quarter2 Quarter3 Quarter4
2000 1.1 1.2 1.3 1.4
2001 2.1 2.2 2.3 2.4
请用SQL写一段代码实现。

3、有如下信息:
起始地 目的地 距离(公里)
A B 1000
A C 1100
A D 900
A E 400
B D 300
D F 600
E A 400
F G 1000
C B 600
请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。

4.表A定义如下:
属性 类型 备注
Id Integer PK
Name Varchar(30)
State char(3)
表A中现有1000万条记录,如果客户端要通过分页的方式从表A中取数据,其中每页20条
记录,有几种方法?描述每种方法如何处理,有什么优缺点?用SQL写出实现代码。
scmail81 发表于 2006-2-12 14:17:25

不错吗!
CSDN上的经典问题阿!
scmail81 发表于 2006-2-12 14:27:45

2.
create table A
(
year int,
Quarter varchar(30),
amount float
)

insert A select 2000,'1',1.1
insert A select 2000,'2',1.2
insert A select 2000,'3',1.3
insert A select 2000,'4',1.4
insert A select 2001,'1',2.1
insert A select 2001,'2',2.2
insert A select 2001,'3',2.3
insert A select 2001,'4',2.4

declare @T_SQL varchar(8000)
set @T_SQL=''
select @T_SQL=@T_SQL + ' sum(case when Quarter=''' + T.Quarter + ''' then amount else 0 end) as Quarter' + T.Quarter +','
from (select Quarter from A group by Quarter) T
set @T_SQL='select year ,' + left(@T_SQL,len(@T_SQL)-1) + ' from A group by year'
exec (@T_SQL)
scmail81 发表于 2006-2-12 14:46:32

3.
create table A
(
起始地 varchar(5),
目的地 varchar(5),
距离 int
)

insert A select 'A','B',1000
insert A select 'A','C',1100
insert A select 'A','D',900
insert A select 'A','E',400
insert A select 'B','D',300
insert A select 'D','F',600
insert A select 'E','A',400
insert A select 'F','G',1000
insert A select 'C','B',600

declare @Q varchar(5)
declare @T table ( 起始地 varchar(5),目的地 varchar(5),路 varchar(8000),lev int)
declare @lev int
set @Q='A'
set @lev=1
insert @T select 起始地,目的地,起始地+'->'+目的地 as 路,@lev as lev from A where 起始地=@Q
while @@rowcount>0
begin
set @lev=@lev+1
insert @T select A.起始地,A.目的地,T.路+'->'+A.目的地 ,@lev as lev from (select * from @T where lev=@lev-1) T,(select * from A where A.目的地 not in (select 起始地 from @T)) A where A.起始地=T.目的地
end
select 路 from @T
scmail81 发表于 2006-2-12 14:56:03

1.
update payment set charge=(select sum(charge) from bill where pay_id=T.pay_id)
from payment p
samfeng_2003 发表于 2006-2-12 15:48:20

我晕,这是哪个公司的面视题?怎么有那么多公司都用这题来考人啊
shiqing8899 发表于 2006-2-12 17:05:36

不是吧?有这么多公司用啊!
gerrylc 发表于 2006-2-13 8:32:02

是啊,我也碰过第二题
select year,sum(case Quarter when '1' then Amount else 0 end) as Quarter1,
Quarter2=sum(case Quarter when '2' then Amount else 0 end),
Quarter3=sum(case Quarter when '3' then Amount else 0 end),
Quarter4=sum(case Quarter when '4' then Amount else 0 end),
Amount=sum(Amount)
from 表 group by year order by year
mm2love2zz 发表于 2006-2-13 14:04:48

看过了~~
mm2love2zz 发表于 2006-2-13 14:17:33

select year,sum(case Quarter when '1' then Amount end) as Quarter1,
sum(case Quarter when '2' then Amount end) as Quarter2,
sum(case Quarter when '3' then Amount end) as Quarter3,
sum(case Quarter when '4' then Amount end) as Quarter4
from A order by year group by year
chenyuandxm 发表于 2006-2-13 16:59:15

1、
select pay_id,charge=sum(charge) into #temp from bill group by pay_id
update payment set payment.charge=#temp.charge from payment,#temp where payment.pay_id=#temp.pay_id
posted on 2006-09-19 11:17 水煮三国 阅读(4286) 评论(5)  编辑  收藏 所属分类: Database

FeedBack:
# re: SQL 经典面试题集
2009-02-17 17:19 | 畅畅畅
3.
select distinct b1.目的地 from B b1,(select 目的地 from B where 起始地='A') as b2 where b1.起始地=b2.目的地 or b1.起始地='A';  回复  更多评论
  
# re: SQL 经典面试题集
2009-02-17 17:24 | 畅畅畅
select distinct b1.目的地 as A能到达的目的地 from B b1,(select 目的地 from B where 起始地='A') as b2 where b1.起始地=b2.目的地 or b1.起始地='A' order by b1.目的地;  回复  更多评论
  
# re: SQL 经典面试题集
2010-09-02 16:38 | David Liu
不错,谢谢了  回复  更多评论
  
# re: SQL 经典面试题集
2010-09-02 16:40 | David Liu
1. 创建一个函数
create FUNCTION GetBillCharge(@pay_id int)
RETURNS int
AS
begin
declare @returnValue int
SELECT @returnValue = charge from dbo.bill where bill.pay_id = @pay_id
return @returnValue
end

更新
update payment
set change= change + dbo.GetBillCharge(payment.pay_id)  回复  更多评论
  
# re: SQL 经典面试题集
2010-09-02 16:41 | David Liu
2. 答案如下

select [YEAR],
sum(case when [Quarter] = 1 then [Amount] else 0 end ) 'Quarter1' ,
sum(case when [Quarter] = 2 then [Amount] else 0 end ) 'Quarter1',
sum(case when [Quarter] = 3 then [Amount] else 0 end ) 'Quarter1' ,
sum(case when [Quarter] = 4 then [Amount] else 0 end ) 'Quarter1'
from A group by [YEAR]
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(4)

随笔分类(85)

随笔档案(89)

文章分类(14)

文章档案(42)

收藏夹(37)

java

oracle

Sybase

搜索

  •  

积分与排名

  • 积分 - 207831
  • 排名 - 267

最新评论

阅读排行榜

评论排行榜