行转列
给出下面的数据:
CREATE TABLE Sales (Year INT, Quarter INT, Results INT)
YEAR QUARTER RESULTS----------- ----------- ----------- 2004 1 20 2004 2 30 2004 3 15 2004 4 10 2005 1 18 2005 2 40 2005 3 12 2005 4 27想要的到结果:YEAR Q1 Q2 Q3 Q4----------- ----------- ----------- ----------- ----------- 2004 20 30 15 10 2005 18 40 12 27这个SQL就可解决这个问题:SELECT Year, MAX(CASE WHEN Quarter = 1 THEN Results END) AS Q1, MAX(CASE WHEN Quarter = 2 THEN Results END) AS Q2, MAX(CASE WHEN Quarter = 3 THEN Results END) AS Q3, MAX(CASE WHEN Quarter = 4 THEN Results END) AS Q4FROM SalesGROUP BY Year解释一下为什么要加max的原因,因为不加max的话结果会是这样:YEAR Q1 Q2 Q3 Q4----------- ----------- ----------- ----------- ----------- 2004 20 - - - 2004 - 30 - - 2004 - - 15 - 2004 - - - 10 2005 18 - - - 2005 - 40 - - 2005 - - 12 - 2005 - - - 27列转行
给出下面数据
CREATE TABLE SalesAgg( year INTEGER, q1 INTEGER, q2 INTEGER, q3 INTEGER, q4 INTEGER );YEAR Q1 Q2 Q3 Q4----------- ----------- ----------- ----------- ----------- 2004 20 30 15 10 2005 18 40 12 27想要的结果YEAR QUARTER RESULTS----------- ----------- ----------- 2004 1 20 2004 2 30 2004 3 15 2004 4 10 2005 1 18 2005 2 40 2005 3 12 2005 4 27这个SQL就可以实现:
SELECT S.Year, Q.Quarter, Q.ResultsFROM SalesAgg AS S, TABLE (VALUES(1, S.q1), (2, S.q2), (3, S.q3), (4, S.q4)) AS Q(Quarter, Results);下面解释一下执行的过程:核心是用table函数创建了一个表,这个表是用value实现的多行表,value实现虚表的例子:db2 => select * from (values (1,2),(2,3)) as t1(col1,col2)COL1 COL2----------- ----------- 1 2 2 3 2 条记录已选择。db2 => select * from (values 1) as a
1
-----------
1
1 条记录已选择。
所不同的是这里跟from子句中的一个表产生了关系,取出了表中的一列作为数据
给出下面的数据:
CREATE TABLE Sales (Year INT, Quarter INT, Results INT)
YEAR QUARTER RESULTS----------- ----------- ----------- 2004 1 20 2004 2 30 2004 3 15 2004 4 10 2005 1 18 2005 2 40 2005 3 12 2005 4 27想要的到结果:YEAR Q1 Q2 Q3 Q4----------- ----------- ----------- ----------- ----------- 2004 20 30 15 10 2005 18 40 12 27这个SQL就可解决这个问题:SELECT Year, MAX(CASE WHEN Quarter = 1 THEN Results END) AS Q1, MAX(CASE WHEN Quarter = 2 THEN Results END) AS Q2, MAX(CASE WHEN Quarter = 3 THEN Results END) AS Q3, MAX(CASE WHEN Quarter = 4 THEN Results END) AS Q4FROM SalesGROUP BY Year解释一下为什么要加max的原因,因为不加max的话结果会是这样:YEAR Q1 Q2 Q3 Q4----------- ----------- ----------- ----------- ----------- 2004 20 - - - 2004 - 30 - - 2004 - - 15 - 2004 - - - 10 2005 18 - - - 2005 - 40 - - 2005 - - 12 - 2005 - - - 27列转行
给出下面数据
CREATE TABLE SalesAgg( year INTEGER, q1 INTEGER, q2 INTEGER, q3 INTEGER, q4 INTEGER );YEAR Q1 Q2 Q3 Q4----------- ----------- ----------- ----------- ----------- 2004 20 30 15 10 2005 18 40 12 27想要的结果YEAR QUARTER RESULTS----------- ----------- ----------- 2004 1 20 2004 2 30 2004 3 15 2004 4 10 2005 1 18 2005 2 40 2005 3 12 2005 4 27这个SQL就可以实现:
SELECT S.Year, Q.Quarter, Q.ResultsFROM SalesAgg AS S, TABLE (VALUES(1, S.q1), (2, S.q2), (3, S.q3), (4, S.q4)) AS Q(Quarter, Results);下面解释一下执行的过程:核心是用table函数创建了一个表,这个表是用value实现的多行表,value实现虚表的例子:db2 => select * from (values (1,2),(2,3)) as t1(col1,col2)COL1 COL2----------- ----------- 1 2 2 3 2 条记录已选择。db2 => select * from (values 1) as a
1
-----------
1
1 条记录已选择。
所不同的是这里跟from子句中的一个表产生了关系,取出了表中的一列作为数据
发表评论
-
一个故事讲清楚NIO(转载)
2015-10-22 11:32 658假设某银行只有10个职 ... -
一些数据库自定义函数
2013-10-15 21:42 919oracle 写法: --联系人列表 create or r ... -
如何远程连接db2数据库
2012-09-18 10:10 960在DB2数据库中,编目(catal ... -
存储过程 入门
2012-09-07 09:49 898示例说明:先创建一个临时表,并插入数据,然后查询临时表,返回游 ... -
ue使用的一些小技巧
2012-09-05 11:36 12621. UE里面替换tab键为空格 解决使用UE编辑好 ... -
ext tree 更改图标
2012-04-16 23:11 1698如果在Java代码中树的Node不设置cls的话,Extjs ... -
js六种数据类型和var
2012-04-13 14:32 1253JavaScript 有六种数据类 ... -
ExtJs 控制复选框disabled
2012-04-13 14:12 2930var csm2 = new Ext.grid.Checkbo ... -
JS 四舍五入
2012-04-10 23:36 959写法巨强的四舍五入的转换函数,如下: function ro ... -
Ext el属性
2012-04-10 23:08 883这个是你要将你的组件渲染到哪个div 比如有个<div ... -
getOutputStream() has already been called for this response
2012-04-06 17:33 983getOutputStream() has al ... -
修改TOMCAT(5.5版本前)内存的方法
2012-03-30 11:34 1106Tomcat默认可以使用的内 ... -
oracle 常用sql
2012-03-27 10:49 854--创建用户 CREATE USER &q ... -
两台windows服务器----SVN的迁移
2012-03-26 17:27 1157两台服务器,进行SVN的迁移: 系统平台:windows se ... -
hibernate 延迟加载
2012-03-23 18:06 784延迟加载机制是为了避 ... -
分享一个ldap验证链接的方法
2012-03-22 12:07 1144public String auth(String userN ... -
poi 操作excel
2012-03-19 21:52 1173本篇面向对象为Java的初 ... -
oracle 复制表
2012-03-15 11:47 11331.不同用户之间的表数 ... -
Oracle Minus关键字
2012-03-06 15:56 1149//--一句话 去同存异,留第一个sql里面的结果。 //创建 ... -
闪回 找回已删除的数据
2012-02-24 15:26 826SCN(系统改变号),它的英文全拼为:System Chang ...
相关推荐
DB2 SQL 通过函数(CONCAT/POSSTR/LOCATE)实现行转列,列转行 可以按照标点把多列转换为一行,多行转换为一列
转换时,需要注意矢量数据的直角坐标系统与栅格数据的行列坐标系统的对应关系,确保转换的准确性。 总的来说,空间数据的转换与处理是GIS工作中至关重要的步骤,它涉及到地理信息的正确表示、兼容性和计算效率。...
### 不定长的SELECT交叉表查询,且不用游标:SQL行列转换技术解析 #### 一、背景介绍 在数据库管理中,数据的组织形式多种多样,有时我们需要将原本存储为行的数据转换成列的形式展示,反之亦然。这种转换在实际...
除具有JPA功能外,具有最佳的sql编写模式、独创的缓存翻译、最优化的分页、并提供分组汇总、同比环比、行列转换、树形排序汇总、多数据库适配(oracle\mysql\sqlserver\postgresql\sqlite\db2\clickhouse\starrocks\...
交叉报表是一种强大的数据分析工具,它能以行列交叉的方式展示数据,使得用户可以从多个角度对数据进行分析。例如,Demo.wfs和Demo文件可能是包含示例数据和配置的测试案例,用户可以通过它们了解如何使用...
除具有JPA功能外,具有最佳的sql编写模式、独创的缓存翻译、最优化的分页、并提供分组汇总、同比环比、行列转换、树形排序汇总、多数据库适配(oracle\mysql\sqlserver\postgresql\sqlite\db2\clickhouse\starrocks\...
描述中提到的“读取excel为List,Object>>方便转换,excel2db,db2excel”指出了该工具的核心功能。首先,它能够将Excel文件读取为一个List,其中每个元素是一个Map,键是单元格的列名,值是对应的单元格数据,这种...
字段3[,字段4] 行列转置,分号前为保留在行的字段,分号后为转置成列的字段 GROUP 字段[,字段2][;[字段名=]统计表达式/[:]格式化表达式][;表达式2] 分组统计,例:--group id;AvgPrice=avg(child.price) SORT 排序...
2. **熟悉MATLAB中常用系统变量和函数**:了解MATLAB中诸如`whos`、`who`、`clear`、`length`、`size`等命令的功能,以便更好地转换为C++实现。 3. **掌握MATLAB支持的小波类型**:MATLAB支持多种小波,这些小波...
在数据转换方面,无论是字段映射,拆分,记录的拆分与合并,还是行列变换,复杂的条件过滤,数学函数数据转换等功能,三款工具均表现优秀,展现了强大的数据处理能力。 #### 高级功能与数据质量 - **复杂条件过滤*...
- `PIVOT`和`UNPIVOT`用于行列转换,便于数据分析。 以上就是SQL语句大全中涉及的一些主要知识点,它们是数据库操作的基础,对于数据库管理和开发人员来说至关重要。学习并熟练掌握这些语句,将有助于高效地管理...
6、提供行列转换(数据旋转),避免写复杂的sql或存储过程,用算法来化解对sql的高要求,同时实现数据库无关(不管是mysql还是sqlserver) 7、提供分组汇总求平均算法(用算法代替sql避免跨数据库语法不一致) 8、分库分表...
商业智能(BI)工具是企业用来提取、转换、加载(ETL)、分析和展示数据的重要工具,用于帮助企业做出明智的业务决策。选择合适的BI工具是一项关键任务,涉及到多个方面的考量。以下是一些主要的选型依据: 1. **...
- **行列转换**:利用SQL函数实现数据的行列互换,如使用PIVOT和UNPIVOT函数。 - **分页查询**:通过LIMIT或ROWNUM等关键字实现数据的分页显示。 - **处理树形结构**:利用自连接或者递归查询等方式处理数据库中的树...