[SQLServer]数据库行列互换
发布时间:2020-12-12 15:38:01 所属栏目:MsSql教程 来源:网络整理
导读:?面试的时候遇到的数据库SQL问题,没写过,然后研究了一下,现将结果记录下来,方便以后查询。 ? 题目1:将表tbltest1的行列互换 ? 表结构: student???? kemu? fenshu student1??? 语文??? 80 student1??? 数学??? 90 student1??? 英语??? 85 student2???
?面试的时候遇到的数据库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 ? ? ? ?===================================================================== 传说通用的, 如下: ? ? ? ?===================================================================== ? ? Oracle's: ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |