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 订单号
当然,这个是模拟的书籍,其实开发环境中的查询结果是这个样子滴: