面试的时候遇到的数据库SQL问题,没写过,然后研究了一下,现将结果记录下来,方便以后查询。
题目1:将表tbltest1的行列互换
表结构:
student kemu fenshu
student1 语文 80
student1 数学 90
student1 英语 85
student2 语文 85
student2 数学 92
student2 英语 82
student1 语文 80
student1 数学 90
student1 英语 85
student2 语文 85
student2 数学 92
student2 英语 82
变成:
student 语文 数学 英语
student1 80 90 85
student2 85 92 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)
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 my
1 name
1 is
1 xudayu
2 hello
2 world
2 hello
2 world
转化成:
id strings
1 my name is xudayu
2 hello 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
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,如需转载请自行联系原作者