SQL語句之普通行列轉換

2021-05-22 03:27:08 字數 1310 閱讀 6252

假設有張學生成績表(tb_rowtocol)如下  

name   subject   result  

張三   語文  73  

張三   數學  83  

張三   物理  93  

李四   語文  74  

李四   數學  84  

李四   物理  94  

想變成    

姓名   語文   數學   物理  

張三   73  83  93  

李四   74  84  94  

declare   @sql   varchar(4000)  

set   @sql   =   'select   name   as   '   +   '姓名'  

select   @sql   =   @sql   +   '   ,   sum(case   subject   when   '''+subject+'''   then   result   end)   ['+subject+']'  

from   (select   distinct   subject   from   rowtocol)   as   a  

set   @sql   =   @sql   +   '   from   rowtocol   group   by   name'  

exec(@sql)    

如果上述兩表互相換一下:即  

表名(cj)  

姓名   語文   數學   物理  

張三   73  83  93  

李四   74  84  94  

想變成    

name   subject   result  

張三   語文  73  

張三   數學  83  

張三   物理  93  

李四   語文  74  

李四   數學  84  

李四   物理  94  

select   姓名   as   name,'語文'   as   subject,語文   as   result   from   cj   union  

select   姓名   as   name,'數學'   as   subject,數學   as   result   from   cj   union  

select   姓名   as   name,'物理'   as   subject,物理   as   result   from   cj  

order   by   姓名   desc    

行列轉換 普通

行列轉換 普通 if exists select from sysobjects where id object id a and sysstat 0xf 3 drop table dbo.a create table dbo.a name1 varchar 20 not null,subject ...

行列轉換 普通

假設有張學生成績表 cj 如下 name subject result 張三 語文 80 張三 數學 90 張三 物理 85 李四 語文 85 李四 數學 92 李四 物理 82 想變成 姓名 語文 數學 物理 張三 80 90 85 李四 85 92 82 declare sql varchar ...

行列轉換等經典SQL語句

在企業應用中,經常會開發報表系統,而在報表中又經常用到行列轉換,這裡有乙個經典的應用例項 原表 姓名 科目 成績 張三 語文 80 張三 數學 90 張三 物理 85 李四 語文 85 李四 物理 82 李四 英語 90 李四 政治 70 王五 英語 90 轉換後的表 姓名 數學 物理 英語 語文 ...