SQL行列转换

原表:  姓名    科目  成绩
          张三    语文    80
          张三    数学    90
          张三    物理    85
          李四    语文    85
          李四    物理    82
          李四    英语    90
          李四    政治    70
          王五    英语    90

转换后的表:  姓名      数学    物理    英语    语文    政治
                      李四        0        82        90      85      70
                      王五        0          0        90      0        0
                      张三        90        85        0      80        0

实例:

SQL code
   
   

create table cj -- 创建表cj
(
ID
Int IDENTITY ( 1 , 1 ) not null , -- 创建列ID,并且每次新增一条记录就会加1
Name Varchar ( 50 ),
Subject
Varchar ( 50 ),
Result
Int ,
primary key (ID) -- 定义ID为表cj的主键
);
-- Truncate table cj
--
Select * from cj
Insert into cj
Select ' 张三 ' , ' 语文 ' , 80 union all
Select ' 张三 ' , ' 数学 ' , 90 union all
Select ' 张三 ' , ' 物理 ' , 85 union all
Select ' 李四 ' , ' 语文 ' , 85 union all
Select ' 李四 ' , ' 物理 ' , 82 union all
Select ' 李四 ' , ' 英语 ' , 90 union all
Select ' 李四 ' , ' 政治 ' , 70 union all
Select ' 王五 ' , ' 英语 ' , 90
-- 行列转换
Declare @sql varchar ( 8000 )
Set @sql = ' Select Name as 姓名 '
Select @sql = @sql + ' ,sum(case Subject when ''' + Subject + ''' then Result else 0 end) [ ' + Subject + ' ] '
from ( select distinct Subject from cj) as cj -- 把所有唯一的科目的名称都列举出来
Select @sql = @sql + ' from cj group by name '
Exec ( @sql )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值