接上篇,要是课程我不知道怎么办呢?“办法比困难多”,考虑后得出一个解决方法。

就是用字符串拼接的方法,把所有的课程都拼接起来。不是很繁琐。代码如下:

sqlserver2000 下,行列转换(从简单到复杂二)
sqlserver2000 下,行列转换(从简单到复杂二)
USE TEMPDB
sqlserver2000 下,行列转换(从简单到复杂二)
sqlserver2000 下,行列转换(从简单到复杂二)
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'TEMPDB.[dbo].[#temptable]'AND type in (N'U'))
sqlserver2000 下,行列转换(从简单到复杂二)
begin
sqlserver2000 下,行列转换(从简单到复杂二)    
drop table #temptable
sqlserver2000 下,行列转换(从简单到复杂二)
end
sqlserver2000 下,行列转换(从简单到复杂二)
create table #temptable
sqlserver2000 下,行列转换(从简单到复杂二)(
sqlserver2000 下,行列转换(从简单到复杂二) ID 
int ,
sqlserver2000 下,行列转换(从简单到复杂二) course 
varchar(10),
sqlserver2000 下,行列转换(从简单到复杂二) Point 
int
sqlserver2000 下,行列转换(从简单到复杂二))
sqlserver2000 下,行列转换(从简单到复杂二)
sqlserver2000 下,行列转换(从简单到复杂二)
insert into #temptable
sqlserver2000 下,行列转换(从简单到复杂二)
select 1 ,'语文',87
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 1 ,'数学',98
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 2,'语文',54
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 2,'化学',97
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 2,'数学',92
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 4,'数学',86
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 5 ,'数学',65
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 6,'语文',76
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 6,'数学',76
sqlserver2000 下,行列转换(从简单到复杂二)
union all
sqlserver2000 下,行列转换(从简单到复杂二)
select 6,'化学',76
sqlserver2000 下,行列转换(从简单到复杂二)
sqlserver2000 下,行列转换(从简单到复杂二)
select * from #temptable
sqlserver2000 下,行列转换(从简单到复杂二)
sqlserver2000 下,行列转换(从简单到复杂二)
declare @str varchar(2000)
sqlserver2000 下,行列转换(从简单到复杂二)
set @str = ' select ID '
sqlserver2000 下,行列转换(从简单到复杂二)
select @str = @str + '  ,  max(case when course = ''' + course +''' then Point else 0 end )  as   ''' + course + '''' 
sqlserver2000 下,行列转换(从简单到复杂二)
from  (select distinct course from #temptable) A  
sqlserver2000 下,行列转换(从简单到复杂二)
set @str  = @str + ' from #temptable group by ID '
sqlserver2000 下,行列转换(从简单到复杂二)
print @str

sqlserver2000 下,行列转换(从简单到复杂二)exec (@str)

 

 

解决啦,说真的这个不是很复杂的问题, 刚要高兴,有哥们说这种问题在sql2005中很见到就能解决。

简单调查下,发现两个关键字PIVOT/UNPIVOT,可以轻松实现行列转换的需求。 

看来得继续前进啦,看看sql2005如何简单实现的。(未完待续)

相关文章:

  • 2021-12-10
  • 2022-12-23
  • 2021-07-03
  • 2021-11-11
  • 2021-07-19
  • 2021-09-20
猜你喜欢
  • 2021-12-16
  • 2021-06-18
  • 2021-05-11
  • 2021-05-26
  • 2021-07-23
  • 2022-02-13
  • 2021-11-20
相关资源
相似解决方案