SQL 行列转换

本文介绍如何在达梦数据库6.0中实现数据的行列转换,包括从行到列及从列到行的转换方法。通过具体实例演示了使用SQL语句进行转换的过程,并展示了两种不同的转换方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 行列转换

以下在达梦数据库6.0中测试通过

wisgood 原创

例子中用到的两个表

课程表 course

Course(C#,Cname,T#) --C# --课程编号,Cname 课程名称,T# 教师编号

测试表 test

Test(C#,Property,Value) --C# --课程编号,Property 属性,Value

 

create table Course(C# varchar(10),Cname varchar(10),T# varchar(10))

insert into Course values('01' , '语文' , '02')

insert into Course values('02' , '数学' , '01')

insert into Course values('03' , '英语' , '03')

 

 

 

1 从行转换成列

 

select c#,'cname' as property ,cname

from course

union

select c#,'t#' ,t#

from course

 

 

为了便于从列转换成行,我们把得到的数据存入test表中

insert into test(

select c#,'cname' as property ,cname

from course

union

select c#,'t#' ,t#

from course

)

Test表中数据变为

 

 

2 从列转换成行

即把test表转换成course表的形式

第一种方法:通过连接的形式

select temp.c#,a.value as cname,b.value as t#

from (select distinct c# from test ) temp

left join test a on (temp.c#=a.c# and a.property='cname')

left join test b on (temp.c#=b.c# and b.property='t#')

第二种方法:通过case语句

select test.c#,

case when test.property='cname' then test.value else null end  as [cname],

case when test.property='t#' then test.value else null end  as [t#]

from  (select distinct c# from test ) temp

join test on (test.c#=temp.c#)

 

此时得到的表如下,不符合条件,需要进一步处理

 

 

 

select test.c#,

max(case when test.property='cname' then test.value else null end ) as [cname],

max(case when test.property='t#' then test.value else null end  )as [t#]

from  (select distinct c# from test ) temp

join test on (test.c#=temp.c#)

group by test.c#

得到满足条件的行

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值