SQL 行专列,列转行

    SQl 行专列,列转行 有几种转换方法:

 

一:SQL行转列:

  创建表,插入数据


create table tb(name varchar(10),pro varchar(10),sorce int)
 
insert into tb values('张三','语文',74)
 
insert into tb values('张三','数学',83)
 
insert into tb values('张三','物理',93)
 
insert into tb values('李四','语文',74)
 
insert into tb values('李四','数学',84)
 
insert into tb values('李四','物理',94)

 

   1.在转换列个数固定并且已知要转换的列的内容的方式下,可以直接通过拼接SQl的方式 如:
  
select name,
MAX( case pro when '语文' then Sorce else 0 end ) 语文,
MAX( case pro when '数学' then Sorce else 0 end ) 数学,
MAX( case pro when '物理' then Sorce else 0 end ) 物理
from tb 
group by name

2. 利用 pivot 函数:

declare @sql varchar(8000)   set @sql=''  --初始化变量@sql 

  select @sql=@sql+','+pro from tb group by pro--变量多值赋值

set @sql=stuff(@sql,1,1,'')--去掉首个','

print @sql

--测试写死 select * from tb pivot(max(sorce) for  pro in(语文,数学,物理,hhh)) aa

--动态获取 set @sql='select * from tb pivot (max(sorce) for pro in ('+@sql+'))a'   exec(@sql)

 

二:列转行

1.用unpivot 函数

create table tb1(姓名 varchar(10),语文 int,数学 int,物理 int)  

insert into tb1 values('张三',74,83,93)  

insert into tb1 values('李四',74,84,94)  

go  

select 姓名,课程,分数 from tb1 unpivot (分数 for 课程 in([语文],[数学],[物理])) t

 

其他:

STUFF ( character_expression , start , length ,character_expression )

删除指定长度的字符,并在指定的起点处插入另一组字符。

以下示例在第一个字符串 abcdef 中删除从第 2 个位置(字符 b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串

SELECT STUFF('abcdef', 2, 3, 'ijklmn') GO

下面是结果集

aijklmnef

 

 

 

 

转载于:https://www.cnblogs.com/79rain/archive/2012/08/10/2631297.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值