`

SQL 为结果集增加列

    博客分类:
  • SQL
SQL 
阅读更多

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 订单号

 当然,这个是模拟的书籍,其实开发环境中的查询结果是这个样子滴:



 

 

  • 大小: 58.1 KB
分享到:
评论

相关推荐

    sql动态行转列 存储过程

    在SQL数据库操作中,"行转列"是一种常见的数据转换需求,它将表格中的多行数据转换为单列显示,通常用于数据汇总和分析。在本案例中,我们主要探讨如何使用SQL语句,尤其是存储过程,来实现动态的行转列功能。这在...

    SQL列转行显示方法

    根据提供的文件信息,本文主要介绍了一种通过SQL存储过程实现列到行转换的方法。下面将对这种方法进行详细的解析与说明。 ### SQL列转行显示方法 #### 一、背景及需求 在处理数据库中的数据时,有时候需要将一列中...

    sql语言全集 sql 查询 修改 增加 删除

    标题和描述均提到了SQL语言的核心操作:查询、修改、增加和删除,这些构成了数据库管理的基础。下面将详细解析这些知识点及其应用场景。 ### SQL语言全集:查询、修改、增加、删除 #### 1. 数据库创建与删除(DDL...

    sqlserver sql语法大全

    这里列出一些基本的SQL语句,如插入、更新和删除数据。 **插入数据:** ```sql INSERT INTO [表名称] ([列名称列表]) VALUES ([值列表]); ``` **更新数据:** ```sql UPDATE [表名称] SET [列名称] = [新值] WHERE...

    超经典SQL语句全集

    `ALTER TABLE`则用于对已有表进行修改,如添加列,但列一旦添加后无法直接删除,DB2中甚至不能更改列的数据类型。删除表使用`DROP TABLE`。此外,`ADD PRIMARY KEY`和`DROP PRIMARY KEY`分别用于增加和删除主键约束...

    C#中读取sql server的数据,并在datagridview中显示

    然后,设置`CommandText`属性为SQL查询语句,该语句用于从名为`gongneng`的表中选择所有列的所有行。 为了将查询结果填充到数据集中,我们使用了`SqlDataAdapter`类: ```csharp SqlDataAdapter da = new ...

    sql操作全集

    - 增加列:`ALTER TABLE tabname ADD COLUMN col type`,向现有表中添加新列,但一旦添加,列无法删除,且在某些数据库系统中,如DB2,列的数据类型也无法更改。 - 添加/删除主键:`ALTER TABLE tabname ADD PRIMARY...

    SQLServer Transact SQL全集--很实用

    它扩展了标准的SQL,增加了事务处理、存储过程、触发器等高级功能。以下是对标题和描述中涉及的一些主要知识点的详细说明: 1. **数据操作**: - `SELECT`:用于从数据库中检索数据,是最常用的SQL语句,可以用来...

    在查询中生成序号列

    Access并不直接支持ROW_NUMBER()函数,这是SQL Server中用来为结果集生成连续序号的函数。但在Access中,我们可以使用DCount函数配合计算字段来达到类似的效果。比如,创建一个带有序号的查询,可以定义一个新的...

    SQL为查询的结果加上序号(ROW_NUMBER) 合并多个查询结果

    原作者好像叫做topcat,我是自己理解了一下凭记忆写下来...但是这样做的好处就是你可以在数据库查询出多个结果集,然后通过ROWINDEX 字段链接在一起之后再返回给客户,更加的灵活。 另外有几个参数可选: 1。 ROW_NU

    SQL操作全集

    - **增加列**: ```sql ALTER TABLE tabname ADD COLUMN col type; ``` - **注意**:一旦增加了列,就不能删除该列。DB2中增加了列之后,其数据类型也不能更改,除非是增加`VARCHAR`类型的长度。 - **添加/删除...

    SQL 函数集.rar

    SQL函数集是数据库查询语言SQL中的重要组成部分,用于处理和操作数据。在SQL SERVER中,函数的使用丰富了数据查询的灵活性和效率。本压缩包"SQL 函数集.rar"显然是一个关于SQL函数的资源集合,特别强调了交叉表、小...

    Microsoft SQL Server 2005技术内幕全套(三):T-SQL查询.part1

    窗口函数(Window Functions)是SQL Server 2005中的一个重要特性,它们允许我们在每个结果行上执行计算,而不只是在整个结果集上。这在处理排名、移动平均、累计和等任务时非常有用。 除此之外,本书还将涉及T-SQL...

    在一个打开的SQLServer表中动态增加字段

    例如,如果要增加一个名为`NewField`的整数字段,SQL语句应为`ALTER TABLE 表名 ADD NewField INT`。 4. **执行命令**:调用TADOCommand的Execute方法来执行SQL语句,从而在数据库中增加字段。 5. **刷新数据集**...

    SQL常用语句速查手册

    增加列的 SQL 语句为:Alter table tabname add column col type 添加主键 添加主键的 SQL 语句为: Alter table tabname add primary key(col) 删除主键的 SQL 语句为: Alter table tabname drop primary key...

    SQL2000课件全集下载

    通过学习,你可以掌握如何编写SELECT语句来检索数据,INSERT、UPDATE和DELETE语句来管理数据,以及如何使用存储过程和触发器来增加代码的复用性和数据库的逻辑控制。 其次,理解SQL Server 2000的数据模型至关重要...

    ORACLE PL/SQL命令集

    PL/SQL(Procedural Language/Structured Query Language)是Oracle公司为数据库开发设计的一种过程式语言,它扩展了SQL的功能,增加了变量、控制结构和异常处理等特性。PL/SQL代码块通常由声明部分、执行部分和...

    精妙SQL语句集

    ### 精妙SQL语句集 #### 一、基础知识篇 **1. 创建数据库** 在 SQL 中,创建一个新的数据库是非常基本的操作。可以使用 `CREATE DATABASE` 语句来完成这项工作。 ```sql CREATE DATABASE database-name; ``` ...

    sqlserver jdbc 4.2

    - **结果集处理**:获取和处理SQL查询结果,包括遍历结果集、检索列值等。 - **数据类型映射**:在Java和SQL Server数据类型之间进行转换。 3. **性能提升**: JDBC 4.2版本针对性能进行了优化,如改进了预编译...

Global site tag (gtag.js) - Google Analytics