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
水煮三國 閱讀(4315)
評論(5) 編輯 收藏 所屬分類:
Database