報表統計 sql面試題

2022-03-24 08:52:35 字數 1951 閱讀 9854

有3張表:

學生表:s

字段:學生編號        學生姓名

課程表:c

字段:課程編號       課程名稱

成績表:sc

字段:學生編號        課程編號         分數

需要實現最終效果如下:

(後面有些課程省略沒有截圖了)

實現的方法:

方法一:

select

max(s.

[name]) 

as姓名,

max(

case

when

sc.cid='

1'then

sc.score 

end) 

asenglish,

max(

case

when

sc.cid='

2'then

sc.score 

end) 

aschinese,

max(

case

when

sc.cid='

3'then

sc.score 

end) 

ashistory 

--...當然這裡可以有多少個的話以此類推,但是sc.cid 的值一定要和c表中的課程id一致,且別名也要和課程名稱一致

from

sc,s 

where

sc.sid 

=s.id 

group

bysc.sid

go優點:這種方法有點傻瓜式,意思簡單明瞭。

缺點:都是固定死的,如果需求一變動,就需要改**。

方法二:

declare

@sql

varchar

(8000

)set

@sql=''

select

@sql

=@sql+'

,max(case when sc.cid=

'''+

convert

(varchar

,sc.cid)

+'''

then sc.score end) ['+

convert

(varchar

,c.[

name])

+']'

from

sc,c 

where

sc.cid 

=c.id 

group

bysc.cid,c.

[name

]set

@sql

=stuff

(@sql,1

,1,''

)print

@sql

exec('

select max(s.[name]) as [name],'+

@sql+'

from sc,s where sc.sid = s.id group by sc.sid')

執行結果:

這裡我們發現chemistry的成績沒有?原因是成績單裡面沒有chemistry的成績記錄。

這樣就實現了乙個動態的報表查詢。

報表統計 sql面試題

有3張表 學生表 s 字段 學生編號 學生姓名 課程表 c 字段 課程編號 課程名稱 成績表 sc 字段 學生編號 課程編號 分數 需要實現最終效果如下 後面有些課程省略沒有截圖了 實現的方法 方法一 select max s.name as姓名,max case when sc.cid 1 the...

sql 分組統計 面試題

兩道sql面試題,那人把試卷給我後居然坐在對面盯著看,我承認我受不了這個,愣死沒答出來。他很鄙視我物件導向的四大特性只聽說過三個,汗 回來後幾分鐘搞定,不一定是最好的,但能應付筆試題。1.表test結構 group score a 勝 b 負 a 負 b 勝 檢索結果 組 勝 負 a 1 1 b 1...

分組統計 SQL面試題

一道sql面試題,題目很簡單。年份 工資 2000 1000 2001 2000 2002 3000 2003 4000 這裡有乙份公司表,一句sql查詢出下列結果 年份 工資 2000 1000 2001 3000 2002 6000 2003 10000 author dba 小七 set no...