在线等一SQL语句,采纳后速速结帖

victory610 2021-02-04 09:55:14
我有一张充值表,先需要根据财务的需求,根据充值日期、有效天数和充值金额分摊到2020年最后一天,即2020年12月31日。
先举例测试数据5条,如下:
订单号,充值日期,充值金额,充值产品,有效天数
1001,2020-07-01,500.00,初一数学提高班,90
1002,2020-08-04,1000.00,成人英语口语突破班,30
1003,2020-09-10,2000.00,初三数学提高班,240
1004,2020-11-15,3000.00,高三语文作文提高班,360
1005,2020-12-20,2000.00,高一物理精讲班,60

需要得到如下的表,即在上表的基础上增加两列分摊金额和剩余金额。分摊金额时,包括充值日期和2020年12月31日这两天,即包括头尾日期。
订单号,充值日期,充值金额,充值产品,有效天数,分摊金额,剩余金额
1001,2020-07-01,500.00,初一数学提高班,90,500.00,0.00
1002,2020-08-04,1000.00,成人英语口语突破班,30,1000.00,0.00
1003,2020-09-10,2000.00,初三数学提高班,240,941.29,1058.71
1004,2020-11-15,3000.00,高三语文作文提高班,360,391.51,2608.49
1005,2020-12-20,2000.00,高一物理精讲班,60,399.96,1600.04

请问这个sql如何写?谢谢!


...全文
47 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
victory610 2021-02-04
  • 打赏
  • 举报
回复
太牛啦,太神速啦。
雨夹雪 2021-02-04
  • 打赏
  • 举报
回复


CREATE TABLE #T
(
订单号 VARCHAR(10),
充值日期 DATE,
充值金额 MONEY,
充值产品 VARCHAR(100),
有效天数 INT
)

INSERT INTO #T VALUES('1001','2020-07-01',500.00,'初一数学提高班',90)
INSERT INTO #T VALUES('1002','2020-08-04',1000.00,'成人英语口语突破班',30)
INSERT INTO #T VALUES('1003','2020-09-10',2000.00,'初三数学提高班',240)
INSERT INTO #T VALUES('1004','2020-11-15',3000.00,'高三语文作文提高班',360)
INSERT INTO #T VALUES('1005','2020-12-20',2000.00,'高一物理精讲班',60)


SELECT 
a.订单号,a.充值日期,a.充值金额,a.充值产品,a.有效天数,
CASE WHEN a.有效天数<= d THEN a.充值金额 ELSE  a.充值金额/a.有效天数 *d END  AS 分摊金额,
充值金额-CASE WHEN a.有效天数<= d THEN a.充值金额 ELSE  a.充值金额/a.有效天数 *d END  AS 剩余金额
  FROM 
(
SELECT * ,DATEDIFF(DAY,充值日期,'2020-12-31')+1 AS d FROM #T
) a

DROP TABLE #T

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧