表的纵横表变换

​ 在我们平时使用数据库时,经常会发现有的表列数过多,为了提高效率,我们经常对要查询的表来纵横表变换。

一.行转列

1.PIVOT函数

PIVOT(任意聚合函数  FOR  列名  IN(类型))

        其中,【聚合函数】聚合的字段,是需要转化为列值的字段;【列名】是需要转化为列标识的字段,【类型】即是需要的结果展示,【类型】中可以指定别名; IN中还可以指定子查询。

2、使用 MAX 和 DECODE 函数

3、使用 CASE  WHEN  和  GROUP  BY

二、列转行

1、使用对应的UNPIVOT函数

函数说明:

        UNPIVOT(自定义列名1【列的值】  FOR  自定义列名2【列名】  IN(【列名】))

        其中,【列的值】字段,是将我们的值字段转为行数据中的【自定义列名1】;【列名】是将我们的列标题字段转为行数据中的【自定义列名2】,【列名】即是转为行的列名。

2.用union all 进行拼接

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

SQL 查询语句

4.2单表查询  4.2.1列名(表名)的别名(as可以不加)     给列名取别名既可以加as也可以不加。 (2008Sage、lower(Sdept)等可计算但无列名,需要指定列名)     原列名既可以作为判断条件,也可以排序;列名的别名只能用作排序,不能用作判断条件。     表名也可以有别名

Python SQLite常见异常及解决办法

1.sqlite获取某一列数值中的最大值一直返回9问题及解决办法sqlite获取最大值一般使用max函数来获取,但是返回值一直是9。原因是因为该列字段值类型不是数值类型。可以通过cast来改变字段值类型,使用以下语句解决:pythonselectmax(cast(列名asint))from表名2.sqlite3.Opera

Hive中使用row_number() over()创建自增主键

虽然hive中的表没有主键一说,但是实际数据开发中经常需要将hive中计算好的表导出到mysql库中供业务使用或开发调用,而mysql表是需要有主键的,在hive中我们可以使用row\_number()over()窗口函数来生成一个自增序列的字段,在将表导出到mysql库中的时候就可以指定该字段为主键,使用起来还是挺方便的。select

MySQL数据查询(重点)

1.查询所有列  \为所有列select\fromtable\_name;2.查询指定列selectid,agefromtable\_name;3.查询时添加常量列本次查询有效,不会添加到表中,只显示 可以用as来命名本列名select'java0328'fromtable\_name;

mysql——GROUP BY和HAVING

GROUPBY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。select子句中的列名必须为分组列或列函数,列函数对于groupby子句定义的每个组返回一个结果。某个员工信息表结构和数据如下:  id  name  dept  salary  edlevel     hiredate   1  张