先看看表长什么样子
select * from student;
±-----±-----±----------±------+
| name | cno | cource | score |
±-----±-----±----------±------+
| S1 | C1 | 数据结构 | 91 |
| S1 | C2 | 操作系统 | 81 |
| S1 | C3 | 微积分 | 71 |
| S2 | C1 | 数据结构 | 92 |
| S2 | C2 | 操作系统 | 82 |
| S2 | C3 | 微积分 | 72 |
| S3 | C1 | 数据结构 | 93 |
| S3 | C2 | 操作系统 | 83 |
| S3 | C3 | 微积分 | 73 |
±-----±-----±----------±------+
建表语句放到下面:
create table student(
name varchar(10),
cno varchar(2),
cource varchar(10),
score float(2)
)
insert into student values(‘S1’,‘C1’,'数据结构 ',‘91’) ;
insert into student values(‘S1’,‘C2’,‘操作系统’,‘81’) ;
insert into student values(‘S1’,‘C3’,‘微积分’,‘71’) ;
insert into student values(‘S2’,‘C1’,‘数据结构’,‘92’) ;
insert into student values(‘S2’,‘C2’,‘操作系统’,‘82’) ;
insert into student values(‘S2’,‘C3’,‘微积分’,‘72’) ;
insert into student values(‘S3’,‘C1’,‘数据结构’,‘93’) ;
insert into student values(‘S3’,‘C2’,‘操作系统’,‘83’) ;
insert into student values(‘S3’,‘C3’,‘微积分’,‘73’) ;
然后想要求下表的样子:
±-----±---------±---------±-------+
| 姓名 | 数据结构 | 操作系统 | 微积分 |
±-----±---------±---------±-------+
| S1 | 91 | 81 | 71 |
| S2 | 92 | 82 | 72 |
| S3 | 93 | 83 | 73 |
±-----±---------±---------±-------+
转置语句如下:
select s11.name “姓名”, s11.score “数据结构”,s12.score “操作系统”, s13.score "微积分"from
(select name, score from student where cno = ‘C1’) as s11,
(select name, score from student where cno = ‘C2’) as s12,
(select name, score from student where cno = ‘C3’)as s13
where s11.name = s12.name
and s12.name = s13.name
先看看原表长什么样子
select * from idtemp;
±-----±------±--------±--------±--------+
| id | token | column1 | column2 | column3 |
±-----±------±--------±--------±--------+
| 1 | AAA | 1234 | abcd | mnop |
| 2 | BBB | 5678 | efgh | qrst |
| 3 | CCC | 9101 | ijkl | uvwx |
±-----±------±--------±--------±--------+
表创建语句
create table idtemp (
id varchar(10),
token varchar(10),
column1 varchar(10),
column2 varchar(10),
column3 varchar(10)
)
表赋值语句
insert into idtemp values(‘1’,‘AAA’,'1234 ',‘abcd’,‘mnop’) ;
insert into idtemp values(‘2’,‘BBB’,'5678 ',‘efgh’,‘qrst’) ;
insert into idtemp values(‘3’,‘CCC’,'9101 ',‘ijkl’,‘uvwx’) ;
想要展开成这个表
id token columns
1 AAA 1234
1 AAA abcd
1 AAA mnop
2 BBB 5678
2 BBB efgh
2 BBB qrst
3 CCC 9101
3 CCC ijkl
3 CCC uvwx
语句如下(会报错,待修改):
Solution using UNION:
SELECT id
,token
,column1 as columns
from Current_table
UNION
SELECT id
,token
,column2 as columns
from Current_table
UNION
SELECT id
,token
,column3 as columns
from Current_table