pg库实现sql行转列

简介: 这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。

这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。

group by + sum + case when实现行转列:

SELECT 
A.ORG_ID,
A.tv_type_count,
A.tv_file_count,
A.tv_date,
CASE
    train_id 
    WHEN '1' THEN
    'ZHI' 
    WHEN '2' THEN
    'XING' 
    WHEN '3' THEN
    'SHI' 
    WHEN '4' THEN
    'KETANG' ELSE NULL 
  END "train_type" 
FROM
  T_SYS_LOG A 
WHERE
  org_id = 'xxx'

查询出来的结果是这样:

20200805184128941.png

这时我就在想要满足前端的展示,一定要将train_type进行一个分解,实现ZHIFA这种类型的数据按照日期进行一个单条数据展示,我就将这条sql抽取了出来:

SELECT 
A.ORG_ID,
A.tv_date,
A.tv_type_count,
A.tv_file_count
FROM
  T_SYS_LOG A 
WHERE
  org_id = 'xxx'

20200805184635337.png

然后就是sql的行转列了:

SELECT 
A.ORG_ID,
A.tv_date,
SUM ( CASE A.train_id WHEN '1' THEN A.tv_type_count ELSE 0 END) AS fa_type_count,
SUM ( CASE A.train_id WHEN '1' THEN A.tv_file_count ELSE 0 END) AS zhi_file_count,
SUM ( CASE A.train_id WHEN '2' THEN A.tv_type_count ELSE 0 END) AS zheng_type_count,
SUM ( CASE A.train_id WHEN '2' THEN A.tv_file_count ELSE 0 END) AS xing_file_count,
SUM ( CASE A.train_id WHEN '3' THEN A.tv_type_count ELSE 0 END) AS shi_type_count,
SUM ( CASE A.train_id WHEN '3' THEN A.tv_file_count ELSE 0 END) AS xis_file_count,
SUM ( CASE A.train_id WHEN '4' THEN A.tv_type_count ELSE 0 END) AS ke_type_count,
SUM ( CASE A.train_id WHEN '4' THEN A.tv_file_count ELSE 0 END) AS tang_file_count 
FROM
  T_SYS_LOG A 
WHERE
  A.org_id = 'xxx'
  GROUP BY A.tv_date,A.ORG_ID
  ORDER BY A.tv_date Desc

在这里根据不同的train_id类型来进行取值,因为每个类型都具有两个关键字段信息,所以在进行一个AS重命名,为了防止在前端出现undefine,如果查询的对应值为空的话,我们ELSE为0,同时根据时间进行分组。

20200805185429280.png

相关文章
|
7月前
|
SQL Java 数据库连接
JSP商品进出库管理系统myeclipse开发sql数据库bs框架java编程jdbc
JSP 商品进出库管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为SQLSERVER2008,使用java语言开发,系统主要采用B/S模式开发。
53 0
|
7月前
|
SQL 数据库 Python
某站点存在SQL注入,直接可进行脱库(实战可参考此方法)
某站点存在SQL注入,直接可进行脱库(实战可参考此方法)
|
9天前
|
SQL XML 数据库
sql导入数据库命令
在SQL Server中,数据库导入可通过多种方式实现:1) 使用SSMS的“导入数据”向导从各种源(如Excel、CSV)导入;2) BULK INSERT语句适用于导入文本文件;3) bcp命令行工具进行批量数据交换;4) OPENROWSET函数直接从外部数据源(如Excel)插入数据。在操作前,请记得备份数据库,并可能需对数据进行预处理以符合SQL Server要求。注意不同方法可能依版本和配置而异。
|
8月前
|
SQL 存储 数据可视化
MSSQL之二 Sql Server中管理库与表
MSSQL之二 Sql Server中管理库与表
56 0
|
4月前
|
SQL 流计算
Flink SQL提供了行转列的功能,可以通过使用`UNPIVOT`操作来实现
【1月更文挑战第1天】Flink SQL提供了行转列的功能,可以通过使用`UNPIVOT`操作来实现
128 0
|
5月前
|
消息中间件 Apache 流计算
Apache Flink的RabbitMQ connector使用的是`org.apache.flink:flink-sql-connector-rabbitmq`库
Apache Flink的RabbitMQ connector使用的是`org.apache.flink:flink-sql-connector-rabbitmq`库
71 2
|
5月前
|
SQL 安全 数据库
如何防止删库跑路?使用NineData进行SQL变更审核!
在日常开发任务中,对核心库进行变更可能带来一系列风险,如删库跑路和数据泄露等。因此,在变更SQL之前,需要进行审核以确保变更合理、安全、规范。
695 1
|
7月前
|
SQL 关系型数据库 MySQL
Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL
Go 使用标准库 sql 包和三方数据库驱动包操作 MySQL
44 0
|
10月前
|
存储 SQL 数据库
SQL Server——备份与恢复数据库
不管是任何系统都不可避免的发生一些故障、错误,而为了防止数据丢失找不到的情况,防患于未然,养成备份的好习惯是很有必要的。
|
SQL Oracle 关系型数据库
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的
本篇文章讲解的主要内容是:***目前Oracle支持的行列互换有两种方式:case when、pivot\unpivot,我将通过几个案例来给大家详解如何通过这两种方式实现“行转列”,“列转行”的需求,并通过执行计划看case when、pivot\unpivot二者的底层逻辑关系以及效率上的影响。***
【SQL开发实战技巧】系列(二十四):数仓报表场景☞通过执行计划详解”行转列”,”列转行”是如何实现的