数据库中的行列转换(横竖转换)
来源:互联网 发布:淘宝上买刀犯法吗 编辑:程序博客网 时间:2024/04/29 06:26
(竖的数据表变横的数据表)例子:
--创建tb_course表,并插入测试数据
CREATE TABLE tb_course(
NAME VARCHAR(20), ##姓名
course VARCHAR(20), ##课程
grade INT ##成绩
);
--测试数据
INSERT INTO tb_course (NAME,course,grade) VALUES('tom','JDBC',20);
INSERT INTO tb_course (NAME,course,grade) VALUES('tom','Hibernate',50);
INSERT INTO tb_course (NAME,course,grade) VALUES('tom','Spring',80);
INSERT INTO tb_course (NAME,course,grade) VALUES('marry','JDBC',30);
INSERT INTO tb_course (NAME,course,grade) VALUES('marry','Hibernate',60);
INSERT INTO tb_course (NAME,course,grade) VALUES('marry','Spring',70);
如图:
--开始做翻转
--方法一(在oracle同这种方法):
SELECT NAME,
SUM(DECODE(course,'JDBC',gradem,0)) JDBC,
SUM(DECODE(course,'Hibernate',gradem,0)) Hibernate,
SUM(DECODE(course,'Spring',gradem,0)) Spring
FROM tb_course GROUP BY NAME;
--方法二(在mysql用这种方法):
SELECT NAME,
SUM(IF(course='JDBC',grade,0)) JDBC,
SUM(IF(course='Hibernate',grade,0)) Hibernate,
SUM(IF(course='Spring',grade,0)) Spring
FROM tb_course GROUP BY NAME;
--方法三(这种方法比较麻烦,用自身做一个多表连接,字段多的时候很容易乱):
SELECT t4.name,t1.JDBC,t2.Hibernate,t3.Spring FROM
(SELECT NAME,grade AS JDBC FROM tb_course WHERE course = 'JDBC') t1,
(SELECT NAME,grade AS Hibernate FROM tb_course WHERE course = 'Hibernate') t2,
(SELECT NAME,grade AS Spring FROM tb_course WHERE course = 'Spring') t3,
(SELECT DISTINCT NAME FROM tb_course) t4
WHERE t1.name = t4.name AND t2.name = t4.name AND t3.name = t4.name;
执行以上任意一种方法后表会变成:
###########################################################超级分割线###########################################################
(横的数据表变竖的数据表)例子:
--创建tb_courses表,并插入测试数据
CREATE TABLE tb_courses(NAME VARCHAR(10),
JDBC INT,
Hibernate INT,
Spring INT
);
--测试数据
INSERT INTO tb_courses VALUES('tom',20,50,80);
INSERT INTO tb_courses VALUES('marry',30,60,70);
如图:
--开始做翻转
--方法一(在oracle 与mysql都可用这种方法):
(SELECT NAME,'JDBC' COURSE,JDBC grade FROM tb_courses)UNION
(SELECT NAME,'Hibernate' COURSE,Hibernate grade FROM tb_courses)
UNION
(SELECT NAME,'Spring' COURSE,Spring grade FROM tb_courses)
ORDER BY NAME DESC;
执行后表会变成:
温馨提示:
UNION与UNION ALL的区别:union与union all 都是查询结果的并集,但是union多了一步去重复数据,所以效率上没union all高,另外union会对查询结果做排序。
- 数据库中的行列转换(横竖转换)
- 数据库中的行列转换(横竖转换)
- 数据库中的行列转换
- sql2000,sql2005 行列转换(又称横竖转换,胖瘦转换)
- 数据库表行列转换
- 数据库行列转换
- 数据库的行列转换
- 数据库行列转换
- 数据库之行列转换
- 数据库数据横竖转换
- 表横竖转换(行列转换)PIVOT 和 UNPIVOT 用法
- 数据库记录的行列转换
- 数据库的行列转换问题
- mySql 数据库表行列转换
- 行列转换
- 行列转换
- 行列转换
- 行列转换
- eclipse+goclipse安装后不能联想和跳转问题解决
- Fuse 之Themes
- 简单web文件上传,commons-fileupload
- 关于ios7以后带导航的界面的坐标问题
- java中数据类型在方法调用后的变化
- 数据库中的行列转换(横竖转换)
- AndroidManifest.xml乱码工具
- 工作中常遇到的小白问题
- Android AutoLayout全新的适配方式 堪称适配终结者
- ASP.NET MVC学习之Ajax(完结)
- 一段文字效果
- linux之cp/scp命令+scp命令详解
- Mina源码分析——IoService
- 一个FMDB数据库简单应用