当前位置: 代码迷 >> Sql Server >> 求ky_min师父进来下 发现SQL 统计的不对
  详细解决方案

求ky_min师父进来下 发现SQL 统计的不对

热度:45   发布时间:2016-04-24 09:43:51.0
求ky_min师傅进来下 发现SQL 统计的不对
求ky_min师傅进来下 发现SQL 统计的不对



    例如2号出库单号 6月5日出库  6月8日收款 5000元 这个其中的3天应该是*利息率= 15元啊 
        2号出库单号 6月5日出库  6月10日收款 4000元 他们之前的天数是2天5K * 利率 5元
        2号出库单号 6月5日出库    还有1000没有付款,只能估算到今天的利息  XX元

原帖

http://bbs.csdn.net/topics/390921870
------解决思路----------------------
;WITH CTE AS(
    SELECT ROW_NUMBER()OVER(PARTITION BY 单号 ORDER BY 收款日期)RN,*FROM TB
)
,CTE2 AS(
SELECT
T1.RN+1 RN,T1.单号,T1.单据日期,T1.收款日期,T1.原单金额,T1.未付金额,T1.本次付款,T1.利息率万
,T1.未付金额-T1.本次付款 LASTMONEY
,T1.未付金额-T1.本次付款 [结算金额]
,ISNULL(T2.收款日期,GETDATE()) NEXTDATE
,DATEDIFF(DD,T1.收款日期,ISNULL(T2.收款日期,GETDATE())) [结算天数]
,CASE WHEN T2.RN IS NULL THEN 1 ELSE 0 END ISLAST
FROM
CTE T1
LEFT JOIN CTE T2 ON T1.RN+1=T2.RN AND T1.单号=T2.单号
UNION ALL
SELECT
1,单号,单据日期,收款日期,原单金额,未付金额,0,利息率万
,原单金额 LASTMONEY
,原单金额 [结算金额]
,收款日期 NEXTDATE
,DATEDIFF(DD,单据日期,收款日期) [结算天数]
,0
FROM
CTE WHERE RN=1
)
SELECT
    *
    ,CAST([结算金额]*([结算天数])*利息率万/10000 AS DECIMAL(19,4))[无利滚利]
    ,CAST([结算金额]*(POWER(1+CAST(利息率万 AS REAL)/10000,[结算天数])-1) AS DECIMAL(19,4))[利滚利]
    ,SUM(CAST([结算金额]*([结算天数])*利息率万/10000 AS DECIMAL(19,4)))OVER(PARTITION BY 单号,ISLAST)[无利滚利至今利息]
    ,SUM(CAST([结算金额]*(POWER(1+CAST(利息率万 AS REAL)/10000,[结算天数])-1) AS DECIMAL(19,4)))OVER(PARTITION BY 单号,ISLAST)[利滚利至今利息]
FROM
    CTE2
ORDER BY 单号,NEXTDATE