CREATE TABLE student (stdname nvarchar( 10 ),stdsubject nvarchar( 10 ),result  int )

   INSERT INTO student VALUES ( ' 張三 ' , ' 語文 ' , 80 )
   INSERT INTO student values ( ' 張三 ' , ' 數學 ' , 90 )
   INSERT INTO student VALUES ( ' 張三 ' , ' 物理 ' , 85 )
   INSERT INTO student VALUES ( ' 李四 ' , ' 語文 ' , 85 )
   INSERT INTO student values ( ' 李四 ' , ' 數學 ' , 92 )
   INSERT INTO student VALUES ( ' 李四 ' , ' 物理 ' , 82 )
   INSERT INTO student VALUES ( ' 李四 ' , ' 化學 ' , 82 )
   INSERT INTO student VALUES ( ' 李四 ' , ' 化學 ' , 82 )
   SELECT  *  FROM student

 CREATE TABLE student2 (stdname nvarchar(10),化學 int,數學 int,物理 int ,語文 int )
 INSERT INTO student2 VALUES ('李四',164,92,82,85)
 INSERT INTO student2 VALUES ('張三',0,90,85,80)

 SELECT * FROM student2

 

行列動態轉換語法

declare @sql varchar(4000)
set @sql='select stdname'
select @sql=@sql+ 
  ',isnull(sum( case  stdsubject when  '''+stdsubject+'''  then Result end), 0 ) '''+stdsubject+ ''''
 from (select distinct stdsubject from student )a
select @sql=@sql+ ' from student  group by stdname '
print @sql
exec (@sql)

 

declare @strsql varchar(4000)
   select @strSql = ''
   select @strSql = @strSql + ' union all 
                     select [stdname], ''' + [name] + '''  as [科目],[' + [name] + '] ' +
                   ' from [student2]
     ' 
  from tempcloumns
select @strSql = substring(@strSql, 11 ,len(@strSql)) + ' order by stdname,[科目] '
print @strsql

 

giga0066 發表在 痞客邦 PIXNET 留言(0) 人氣()