客户编码 业务员 欠款金额 欠款日期 回款金额 剩余回款金额 剩余欠款金额
ah00003 李 0 2014-12-31 300000
ah00003 李 239895.15 2015-01-26 0
ah00003 李 116884.8 2015-01-27 0
ah00012 张 12536 2014-12-31 1000000
ah00012 张 20135 .36 2015-01-15 0
ah00012 张 1253677 2015-02-03 0
ah00012 张 569 2015-02-04 0回款金额 是 一段时间内的回款的总金额
现在按欠款日期 把回款先抵掉日期比较前的欠款
想得出以下表格客户编码 业务员 欠款金额 欠款日期 剩余回款金额 剩余欠款金额
ah00003 李 0 2014-12-31 300000 0
ah00003 李 239895.15 2015-01-26 60104.85 0
ah00003 李 116884.8 2015-01-27 0 56779.95
ah00012 张 12536 2014-12-31 987464 0
ah00012 张 20135 .36 2015-01-15 967628.64 0
ah00012 张 1253677 2015-02-03 0 286348.36
ah00012 张 569 2015-02-04 0 569求大神!!
ah00003 李 0 2014-12-31 300000
ah00003 李 239895.15 2015-01-26 0
ah00003 李 116884.8 2015-01-27 0
ah00012 张 12536 2014-12-31 1000000
ah00012 张 20135 .36 2015-01-15 0
ah00012 张 1253677 2015-02-03 0
ah00012 张 569 2015-02-04 0回款金额 是 一段时间内的回款的总金额
现在按欠款日期 把回款先抵掉日期比较前的欠款
想得出以下表格客户编码 业务员 欠款金额 欠款日期 剩余回款金额 剩余欠款金额
ah00003 李 0 2014-12-31 300000 0
ah00003 李 239895.15 2015-01-26 60104.85 0
ah00003 李 116884.8 2015-01-27 0 56779.95
ah00012 张 12536 2014-12-31 987464 0
ah00012 张 20135 .36 2015-01-15 967628.64 0
ah00012 张 1253677 2015-02-03 0 286348.36
ah00012 张 569 2015-02-04 0 569求大神!!
SELECT T1.客户编码,T1.业务员,T1.欠款金额,T1.欠款日期,T1.回款金额
,SUM(T2.欠款金额)总欠款金额
FROM TB T1
JOIN TB T2 ON T1.客户编码=T2.客户编码 AND T1.欠款日期>=T2.欠款日期
GROUP BY T1.客户编码,T1.业务员,T1.欠款金额,T1.欠款日期,T1.回款金额
)
SELECT 客户编码,业务员,欠款金额,欠款日期
,CASE WHEN 回款金额>总欠款金额 THEN 回款金额-总欠款金额 ELSE 0 END 剩余回款金额
,CASE WHEN 回款金额<总欠款金额 AND 回款金额>总欠款金额-欠款金额 THEN 总欠款金额-回款金额
WHEN 回款金额>总欠款金额 THEN 0
ELSE 欠款金额
END 剩余欠款金额
FROM CTE
ORDER BY 客户编码,欠款日期
SELECT T1.客户编码,T1.业务员,T1.欠款金额,T1.欠款日期,T1.回款金额,SUM(T2.回款金额)总回款金额
,SUM(T2.欠款金额)总欠款金额
FROM TB T1
JOIN TB T2 ON T1.客户编码=T2.客户编码 AND T1.欠款日期>=T2.欠款日期
GROUP BY T1.客户编码,T1.业务员,T1.欠款金额,T1.欠款日期,T1.回款金额
)
SELECT 客户编码,业务员,欠款金额,欠款日期--,回款金额,总欠款金额
,CASE WHEN 总回款金额>总欠款金额 THEN 总回款金额-总欠款金额 ELSE 0 END 剩余回款金额
,CASE WHEN 总回款金额<总欠款金额 AND 总回款金额>总欠款金额-欠款金额 THEN 总欠款金额-总回款金额
WHEN 总回款金额>总欠款金额 THEN 0
ELSE 欠款金额
END 剩余欠款金额
FROM CTE
ORDER BY 客户编码,欠款日期
table1(客户编码,业务员,欠款金额,欠款日期,回款金额) AS (
SELECT 'ah00003',N'李',Convert(money,0),'2014-12-31',Convert(money,300000) UNION ALL
SELECT 'ah00003',N'李',239895.15,'2015-01-26',0 UNION ALL
SELECT 'ah00003',N'李',116884.8,'2015-01-27',0 UNION ALL
SELECT 'ah00012',N'张',12536,'2014-12-31',1000000 UNION ALL
SELECT 'ah00012',N'张',20135.36,'2015-01-15',0 UNION ALL
SELECT 'ah00012',N'张',1253677,'2015-02-03',0 UNION ALL
SELECT 'ah00012',N'张',569,'2015-02-04',0
), */
t1 AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY 客户编码 ORDER BY 欠款日期) rn
FROM table1
),
t2 AS (
SELECT *,
Convert(money,回款金额-欠款金额) 剩余金额
FROM t1
WHERE rn = 1
UNION ALL
SELECT t1.*,
Convert(money,t2.剩余金额+t1.回款金额-t1.欠款金额)
FROM t2
JOIN t1
ON t2.客户编码 = t1.客户编码
AND t2.rn+1 = t1.rn
)
SELECT 客户编码, 业务员, 欠款金额, 欠款日期,
CASE WHEN 剩余金额 > 0
THEN 剩余金额
ELSE 0
END 剩余回款金额,
CASE WHEN 剩余金额 < 0
THEN ABS(剩余金额)
ELSE 0
END 剩余欠款金额
FROM T2
ORDER BY 客户编码, rn
客户编码 业务员 欠款金额 欠款日期 剩余回款金额 剩余欠款金额
-------- ------ --------------------- ---------- --------------------- ---------------------
ah00003 李 0.0000 2014-12-31 300000.00 0.00
ah00003 李 239895.1500 2015-01-26 60104.85 0.00
ah00003 李 116884.8000 2015-01-27 0.00 56779.95
ah00012 张 12536.0000 2014-12-31 987464.00 0.00
ah00012 张 20135.3600 2015-01-15 967328.64 0.00
ah00012 张 1253677.0000 2015-02-03 0.00 286348.36
ah00012 张 569.0000 2015-02-04 0.00 286917.36
xiexie
create table t1
(
客户编码 nvarchar(100),
业务员 nvarchar(100),
欠款金额 money,
欠款日期 datetime,
回款金额 money
)
insert into t1(客户编码,业务员,欠款金额,欠款日期,回款金额)
SELECT 'ah00003',N'李',Convert(money,0),'2014-12-31',Convert(money,300000) UNION ALL
SELECT 'ah00003',N'李',239895.15,'2015-01-26',0 UNION ALL
SELECT 'ah00003',N'李',116884.8,'2015-01-27',0 UNION ALL
SELECT 'ah00012',N'张',12536,'2014-12-31',1000000 UNION ALL
SELECT 'ah00012',N'张',20135.36,'2015-01-15',0 UNION ALL
SELECT 'ah00012',N'张',1253677,'2015-02-03',0 UNION ALL
SELECT 'ah00012',N'张',569,'2015-02-04',0
;with t2 as
(
select *,序号=ROW_NUMBER() over (PARTITION by 客户编码 order by 欠款日期) from t1 ),
t4 as
(
select * ,剩余金额 =(select SUM(isnull(a.回款金额,0))-SUM(ISNULL(a.欠款金额,0)) from t2 a where a.序号<=b.序号 and a.客户编码=b.客户编码)from t2 b
)
SELECT 客户编码, 业务员, 欠款金额, 欠款日期,
CASE WHEN 剩余金额 > 0
THEN 剩余金额
ELSE 0
END 剩余回款金额,
CASE WHEN 剩余金额 < 0
THEN ABS(剩余金额)
ELSE 0
END 剩余欠款金额
FROM T4
ORDER BY 客户编码, 序号