1,現(xiàn)有表bill和表payment結(jié)構(gòu)如下,兩表通過pay_id關(guān)聯(lián):
bill表――bill_id是帳單標(biāo)識(shí),charge為帳單金額,pay_id為付款編號(hào),PK:bill_id
bill_id INTEGER
charge INTEGER
pay_id INTEGER
payment表――pay_id為付款編號(hào),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
其中每行表表示一個(gè)季度的數(shù)據(jù)。
如果處理表A中的數(shù)據(jù),得到如下的結(jié)果。
Year Quarter1 Quarter2 Quarter3 Quarter4
2000 1.1 1.2 1.3 1.4
2001 2.1 2.2 2.3 2.4
請(qǐng)用SQL寫一段代碼實(shí)現(xiàn)。
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
請(qǐng)用SQL語(yǔ)句或一段代碼寫出從A出發(fā),可達(dá)到的目的地(包括間接方式)。
4.表A定義如下:
屬性 類型 備注
Id Integer PK
Name Varchar(30)
State char(3)
表A中現(xiàn)有1000萬(wàn)條記錄,如果客戶端要通過分頁(yè)的方式從表A中取數(shù)據(jù),其中每頁(yè)20條
記錄,有幾種方法?描述每種方法如何處理,有什么優(yōu)缺點(diǎn)?用SQL寫出實(shí)現(xiàn)代碼。
scmail81 發(fā)表于 2006-2-12 14:17:25
不錯(cuò)嗎!
CSDN上的經(jīng)典問題阿!
scmail81 發(fā)表于 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 發(fā)表于 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 發(fā)表于 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 發(fā)表于 2006-2-12 15:48:20
我暈,這是哪個(gè)公司的面視題?怎么有那么多公司都用這題來(lái)考人啊
shiqing8899 發(fā)表于 2006-2-12 17:05:36
不是吧?有這么多公司用?。?br />
gerrylc 發(fā)表于 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 發(fā)表于 2006-2-13 14:04:48
看過了~~
mm2love2zz 發(fā)表于 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 發(fā)表于 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
水煮三國(guó) 閱讀(4315)
評(píng)論(5) 編輯 收藏 所屬分類:
Database