Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64757
  • 博文数量: 44
  • 博客积分: 1985
  • 博客等级: 上尉
  • 技术积分: 505
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-14 16:54
文章分类

全部博文(44)

文章存档

2011年(1)

2008年(43)

我的朋友

分类: Mysql/postgreSQL

2008-06-16 01:36:35

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
阅读(494) | 评论(1) | 转发(0) |
0

上一篇:华为面试2

下一篇:一个SQL面试题。。。

给主人留下些什么吧!~~

chinaunix网友2008-06-17 14:56:29

1: update payment set charge=(select sum(charge) from bill where pay_id=T.pay_id) 2: 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 a group by year order by year