面試的時候遇到的資料庫SQL問題,沒寫過,然後研究了一下,現将結果記錄下來,友善以後查詢。
題目1:将表tbltest1的行列互換
表結構:
student kemu fenshu
student1 國文 80
student1 數學 90
student1 英語 85
student2 國文 85
student2 數學 92
student2 英語 82
變成:
student 國文 數學 英語
student1 80 90 85
student2 85 92 82
SQLserver的sql語句:
declare @sql varchar(4000)
set @sql = 'select student'
select @sql = @sql + ',sum(case kemu when '''+ kemu +''' then fenshu else 0 end)['+ kemu+']'
from (select distinct kemu from tbltest1) as a
set @sql = @sql + ' from tbltest1 group by student'
exec(@sql)
或者
select student,sum(case kemu when '國文' then fenshu else 0 end) 國文,sum(case kemu when '數學' then fenshu else 0 end) 數學,sum(case kemu when '英語' then fenshu else 0 end) 英語 from tbltest group by student
注:個人覺得上面的好。如果一兩個選項可以使用下面的sql,如果選項多上面的sql就顯的友善的多。
2005的話好像還有個函數可以用,等研究好了再發上來。
題目2:合并
表結構tbltest2:
id strings
1 my
1 name
1 is
1 xudayu
2 hello
2 world
轉化成:
id strings
1 my name is xudayu
2 hello world
SQLServer的sql語句:
--建立一個合并的函數
create function fliehebin(@id int)
returns varchar(5000)
as
begin
declare @str varchar(5000)
set @str=''
select @str=@str + cast(strings as varchar(50)) +' ' from tbltest2 where id=@id
set @str=subString(@str,1,len(@str))
return(@str)
end
go
--調用自定義函數得到結果
select distinct id,dbo.fliehebin(id) from tbltest2
Mysql沒研究,其他資料庫,如Oracle的因為沒有環境研究不了,哪位會的,回複上來呀!
本文轉自xudayu 51CTO部落格,原文連結:http://blog.51cto.com/xudayu/84355,如需轉載請自行聯系原作者