OA系统有个需求,需要将订单的支付(可能多次)显示在订单信息中,支付记录在另一张表,如下图
订单表:
订单号 | 订单金额 | 订单状态 |
D000001 | 10000 | 未缴清 |
支付记录表
支付编号 | 订单号 | 付款金额 | 付款时间 |
1 | D000001 | 2000 | 2015-8-10 |
2 | D000001 | 1000 | 2015-8-11 |
3 | D000001 | 5000 | 2015-8-12 |
现在我们要生成如下图的表:
订单号 | 订单金额 | 订单状态 | 1次到账 | 1次到账时间 | 2次到账 | 2次到账时间 | 3次到账 | 3次到账时间 |
D000001 | 10000 | 未缴清 | 2000 | 2015-8-10 | 1000 | 2015-8-11 | 5000 | 2015-8-12 |
我想通过一条SQL实现这个查询
SELECT 订单号,订单金额,订单状态 ,'1次到账'=(SELECT 付款金额 FROM(SELECT 付款金额 ,(row_number()OVER(ORDER BY 支付编号)) AS RowIndex FROM 支付记录表 WHERE 支付记录表.订单号=订单表.订单号) WHERE T.RowIndex =1) ,'1次到账时间'=(SELECT 到账时间 FROM(SELECT 到账时间 ,(row_number()OVER(ORDER BY 支付编号)) AS RowIndex FROM 支付记录表 WHERE 支付记录表.订单号=订单表.订单号) WHERE T.RowIndex =1) ,'2次到账'=(SELECT 付款金额 FROM(SELECT 付款金额 ,(row_number()OVER(ORDER BY 支付编号)) AS RowIndex FROM 支付记录表 WHERE 支付记录表.订单号=订单表.订单号) WHERE T.RowIndex =2) ,'2次到账时间'=(SELECT 到账时间 FROM(SELECT 到账时间 ,(row_number()OVER(ORDER BY 支付编号)) AS RowIndex FROM 支付记录表 WHERE 支付记录表.订单号=订单表.订单号) WHERE T.RowIndex =2) ,'3次到账'=(SELECT 付款金额 FROM(SELECT 付款金额 ,(row_number()OVER(ORDER BY 支付编号)) AS RowIndex FROM 支付记录表 WHERE 支付记录表.订单号=订单表.订单号) WHERE T.RowIndex =3) ,'3次到账时间'=(SELECT 到账时间 FROM(SELECT 到账时间 ,(row_number()OVER(ORDER BY 支付编号)) AS RowIndex FROM 支付记录表 WHERE 支付记录表.订单号=订单表.订单号) WHERE T.RowIndex =4) FROM 订单号
当然,这个是模拟的书籍,其实开发环境中的查询结果是这个样子滴:
相关推荐
在SQL数据库操作中,"行转列"是一种常见的数据转换需求,它将表格中的多行数据转换为单列显示,通常用于数据汇总和分析。在本案例中,我们主要探讨如何使用SQL语句,尤其是存储过程,来实现动态的行转列功能。这在...
根据提供的文件信息,本文主要介绍了一种通过SQL存储过程实现列到行转换的方法。下面将对这种方法进行详细的解析与说明。 ### SQL列转行显示方法 #### 一、背景及需求 在处理数据库中的数据时,有时候需要将一列中...
标题和描述均提到了SQL语言的核心操作:查询、修改、增加和删除,这些构成了数据库管理的基础。下面将详细解析这些知识点及其应用场景。 ### SQL语言全集:查询、修改、增加、删除 #### 1. 数据库创建与删除(DDL...
这里列出一些基本的SQL语句,如插入、更新和删除数据。 **插入数据:** ```sql INSERT INTO [表名称] ([列名称列表]) VALUES ([值列表]); ``` **更新数据:** ```sql UPDATE [表名称] SET [列名称] = [新值] WHERE...
`ALTER TABLE`则用于对已有表进行修改,如添加列,但列一旦添加后无法直接删除,DB2中甚至不能更改列的数据类型。删除表使用`DROP TABLE`。此外,`ADD PRIMARY KEY`和`DROP PRIMARY KEY`分别用于增加和删除主键约束...
- 增加列:`ALTER TABLE tabname ADD COLUMN col type`,向现有表中添加新列,但一旦添加,列无法删除,且在某些数据库系统中,如DB2,列的数据类型也无法更改。 - 添加/删除主键:`ALTER TABLE tabname ADD PRIMARY...
它扩展了标准的SQL,增加了事务处理、存储过程、触发器等高级功能。以下是对标题和描述中涉及的一些主要知识点的详细说明: 1. **数据操作**: - `SELECT`:用于从数据库中检索数据,是最常用的SQL语句,可以用来...
原作者好像叫做topcat,我是自己理解了一下凭记忆写下来...但是这样做的好处就是你可以在数据库查询出多个结果集,然后通过ROWINDEX 字段链接在一起之后再返回给客户,更加的灵活。 另外有几个参数可选: 1。 ROW_NU
- **增加列**: ```sql ALTER TABLE tabname ADD COLUMN col type; ``` - **注意**:一旦增加了列,就不能删除该列。DB2中增加了列之后,其数据类型也不能更改,除非是增加`VARCHAR`类型的长度。 - **添加/删除...
Access并不直接支持ROW_NUMBER()函数,这是SQL Server中用来为结果集生成连续序号的函数。但在Access中,我们可以使用DCount函数配合计算字段来达到类似的效果。比如,创建一个带有序号的查询,可以定义一个新的...
SQL函数集是数据库查询语言SQL中的重要组成部分,用于处理和操作数据。在SQL SERVER中,函数的使用丰富了数据查询的灵活性和效率。本压缩包"SQL 函数集.rar"显然是一个关于SQL函数的资源集合,特别强调了交叉表、小...
窗口函数(Window Functions)是SQL Server 2005中的一个重要特性,它们允许我们在每个结果行上执行计算,而不只是在整个结果集上。这在处理排名、移动平均、累计和等任务时非常有用。 除此之外,本书还将涉及T-SQL...
增加列的 SQL 语句为:Alter table tabname add column col type 添加主键 添加主键的 SQL 语句为: Alter table tabname add primary key(col) 删除主键的 SQL 语句为: Alter table tabname drop primary key...
例如,如果要增加一个名为`NewField`的整数字段,SQL语句应为`ALTER TABLE 表名 ADD NewField INT`。 4. **执行命令**:调用TADOCommand的Execute方法来执行SQL语句,从而在数据库中增加字段。 5. **刷新数据集**...
通过学习,你可以掌握如何编写SELECT语句来检索数据,INSERT、UPDATE和DELETE语句来管理数据,以及如何使用存储过程和触发器来增加代码的复用性和数据库的逻辑控制。 其次,理解SQL Server 2000的数据模型至关重要...
PL/SQL(Procedural Language/Structured Query Language)是Oracle公司为数据库开发设计的一种过程式语言,它扩展了SQL的功能,增加了变量、控制结构和异常处理等特性。PL/SQL代码块通常由声明部分、执行部分和...
### 精妙SQL语句集 #### 一、基础知识篇 **1. 创建数据库** 在 SQL 中,创建一个新的数据库是非常基本的操作。可以使用 `CREATE DATABASE` 语句来完成这项工作。 ```sql CREATE DATABASE database-name; ``` ...
- **结果集处理**:获取和处理SQL查询结果,包括遍历结果集、检索列值等。 - **数据类型映射**:在Java和SQL Server数据类型之间进行转换。 3. **性能提升**: JDBC 4.2版本针对性能进行了优化,如改进了预编译...
- **使用视图**:视图可以看作是一个虚拟表,它保存了SQL查询的结果,便于简化复杂的查询操作。 - **列的重命名**:通过AS关键字重命名视图中的列名,使其更具可读性。 - **SQL对视图的处理过程**:解释了SQL引擎...