`

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为查询的结果加上序号(ROW_NUMBER) 合并多个查询结果

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

    SQL操作全集(非常适合初学者)

    6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname ...

    SQL语法大全

    SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...

    经典SQL语句大全

    Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引...

    Microsoft SQL Server 2005 Express Edition SP3

    如果现有的 SQL Server 客户端安装配置为启用了“强制加密”选项,则安装程序可能会失败。若要解决此问题,请在所有 SQL Server 客户端上禁用此选项。对于 SQL Server 2000 中的 Microsoft 数据访问组件 (MDAC) ...

    经典全面的SQL语句大全

     右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。  C:full outer join:  全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。  其次,大家来看一些不错的sql...

    SQL Server数据库查询速度慢原因及优化方法

    4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一...

    SQL COOKBOOK(压缩1/2)

    1.5为列取有意义的名称 1.6在WHERE子句中引用取别名的列 1.7连接列值 1.8在SELECT语句中使用条件逻辑 1.9限制返回的行数 1.10从表中随机返回n条记录 1.11查找空值 1.12将空值转换为实际值 1.13按模式搜索 第...

    常用SQL 语句大全

    6、增加一个列 7、添加和删除主键 8、索引 9、视图 10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分...

    SQLServer2008查询性能优化 2/2

    11.2 在小结果集上操作 283 11.2.1 限制选择列表中的列数 283 11.2.2 使用高选择性的WHERE子句 284 11.3 有效地使用索引 284 11.3.1 避免不可参数化的搜索条件 285 11.3.2 避免WHERE子句列上的算术运算符 289 ...

    SQLServer2008查询性能优化 1/2

    11.2 在小结果集上操作 283 11.2.1 限制选择列表中的列数 283 11.2.2 使用高选择性的WHERE子句 284 11.3 有效地使用索引 284 11.3.1 避免不可参数化的搜索条件 285 11.3.2 避免WHERE子句列上的算术运算符 289 ...

    SQL性能优化

     以上两个SQL中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的...

    sql 优化汇总 优化汇总 优化汇总

    1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成... 4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     作为Oracle SQL经典著作之一,本书为SQL开发人员指明了前行的方向,赋予了他们不断开拓的动力。 作者简介  KAREN MORTON 研究人员、教育家及顾问,Fidelity信息服务公司的资深数据库管理员和性能调优专家。她...

    sql文件编辑器,免费版

    如果运行多个Select语句则显示多个结果集,用来对比查看。(快捷键F5)  6、数据库树中查找对象。  7、在Sql语句编辑器中快速查找功能。  8、查看数据库属*  9、查看表结构  10、自动生成Sql语句模板  11...

    MYSQL,SQLSERVER,ORACLE常用的函数

    增加或减去月份 SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual; TO_CHA ------ 200002 SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from...

    计算机病毒与防护:MYSQL联合查询上.ppt

    ORDER BY 语句用于对结果集进行排序,在SELECT 语句末尾增加ORDER BY N表示基于第N列进行排序; 联合查询注入原理-判断原有查询语句的列数 判断原有查询语句的列数通常基于布尔型盲注的思想来进行,通常使用order ...

    T-SQL高级查询

    --高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student;...我们可以将公式表表达式(CET)视为临时结果集,在select、insert、update、delete...

    超实用sql语句

    Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引...

Global site tag (gtag.js) - Google Analytics