当前位置: 代码迷 >> Sql Server >> 求1SQL语句,自动填写某列
  详细解决方案

求1SQL语句,自动填写某列

热度:96   发布时间:2016-04-24 09:27:51.0
求一SQL语句,自动填写某列
数据库中有“客户付款表”如下,

客户 3月金额 3月付款        账期
客户1 3000 付款已到账 15
客户2 2000                 30
客户3 2000                 15
客户4 0                         15
客户5 2000                 15
客户6 2000                 15
客户7 2000                  15
客户8 2000 查账错误         15
客户9 0       ----------          15
客户10 2000 付款已到账 15
客户11 2000 付款已到账 15
客户12  0       ----------          15
客户13 2000 逾期未付 15
客户14  0       ----------          15

其中“3月付款”列需要自动填充:
1. 如果数据库中“3月付款”列已经有数据(不为空)的项目保持不变
2. 对于数据库中“3月付款”列为空的项目按如下规则
     2.1 如果对应客户的“3月金额”为0或空,则“3月付款”列对应项目填充字符串“--------”
     2.2如果已经逾期(如:客户1应该付款的时间是4月15号,如果当前时间超过4月15号,且对应项目为空则视为逾期)则“3月付款”列对应项目填充字符串“逾期未付”
------解决思路----------------------
--因为你没给哪个年,现在的语句取本年
--另外不知道你是要更新旧数据,还是只要查询的时候替换
--查询的时候替换
SELECT 客户,[3月金额]
,CASE WHEN [3月付款]<>''THEN[3月付款]
WHEN [3月金额]<=0 OR [3月金额]IS NULL THEN '--------'
WHEN DATEADD(DAY,账期,CONVERT(VARCHAR(5),GETDATE(),120)+'03-01')>=GETDATE()
THEN '逾期未付'
ELSE '逾期'
END [3月付款],账期
FROM TB
--更新旧数据
UPDATE TB
SET [3月付款]=(CASE WHEN [3月付款]<>''THEN[3月付款]
WHEN [3月金额]<=0 OR [3月金额]IS NULL THEN '--------'
WHEN DATEADD(DAY,账期,CONVERT(VARCHAR(5),GETDATE(),120)+'03-01')>=GETDATE()
THEN '逾期未付'
ELSE '逾期'
END)
WHERE [3月付款]IS NULL OR [3月付款]=''
  相关解决方案