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 订单号
当然,这个是模拟的书籍,其实开发环境中的查询结果是这个样子滴:
相关推荐
原作者好像叫做topcat,我是自己理解了一下凭记忆写下来...但是这样做的好处就是你可以在数据库查询出多个结果集,然后通过ROWINDEX 字段链接在一起之后再返回给客户,更加的灵活。 另外有几个参数可选: 1。 ROW_NU
6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键: Alter table tabname ...
SQL语法大全 SQL语法大全 1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access ...
Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引...
如果现有的 SQL Server 客户端安装配置为启用了“强制加密”选项,则安装程序可能会失败。若要解决此问题,请在所有 SQL Server 客户端上禁用此选项。对于 SQL Server 2000 中的 Microsoft 数据访问组件 (MDAC) ...
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 C:full outer join: 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。 其次,大家来看一些不错的sql...
4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一...
1.5为列取有意义的名称 1.6在WHERE子句中引用取别名的列 1.7连接列值 1.8在SELECT语句中使用条件逻辑 1.9限制返回的行数 1.10从表中随机返回n条记录 1.11查找空值 1.12将空值转换为实际值 1.13按模式搜索 第...
6、增加一个列 7、添加和删除主键 8、索引 9、视图 10、几个简单的基本的sql语句 11、几个高级查询运算词 12、使用外连接 13、分组:Group by: 14、对数据库进行操作: 15.如何修改数据库的名称: 第二部分...
11.2 在小结果集上操作 283 11.2.1 限制选择列表中的列数 283 11.2.2 使用高选择性的WHERE子句 284 11.3 有效地使用索引 284 11.3.1 避免不可参数化的搜索条件 285 11.3.2 避免WHERE子句列上的算术运算符 289 ...
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中dy_dj(电压等级)及xh_bz(销户标志)两个字段都没进行索引,所以执行的时候都是全表扫描,第一条SQL的dy_dj = '1KV以下'条件在记录集内比率为99%,而xh_bz=1的比率只为0.5%,在进行第一条SQL的...
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O吞吐量小,形成... 4、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0
作为Oracle SQL经典著作之一,本书为SQL开发人员指明了前行的方向,赋予了他们不断开拓的动力。 作者简介 KAREN MORTON 研究人员、教育家及顾问,Fidelity信息服务公司的资深数据库管理员和性能调优专家。她...
如果运行多个Select语句则显示多个结果集,用来对比查看。(快捷键F5) 6、数据库树中查找对象。 7、在Sql语句编辑器中快速查找功能。 8、查看数据库属* 9、查看表结构 10、自动生成Sql语句模板 11...
增加或减去月份 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...
ORDER BY 语句用于对结果集进行排序,在SELECT 语句末尾增加ORDER BY N表示基于第N列进行排序; 联合查询注入原理-判断原有查询语句的列数 判断原有查询语句的列数通常基于布尔型盲注的思想来进行,通常使用order ...
--高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from student;...我们可以将公式表表达式(CET)视为临时结果集,在select、insert、update、delete...
Rid为一个标识列,如果top后还有具体的字段,这样做是非常有好处的。因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引...