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

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



 

猜你喜欢

转载自jingjie520.iteye.com/blog/2235083