求一条更新语句!

sunny1160 2006-09-29 01:33:43
1、有两个表“收文主表”和“办理阶段”。收文主表.办理阶段ID = 办理阶段.ID
2、“收文主表”中的字段分别为ID(int)、发案时间(datetime)、回复时间(datetime)、拆除时间(datetime)、立案时间(datetime)、处罚时间(datetime)、结案时间(datetime)和收文状态(tinyint)。
“办理阶段”中的字段分别为ID(int)、办理阶段(char(10))和催办期限(tinyint)。
3、现在需要写的SQL语句的思路如下:
(1)定义一个变量@EndTime(datetime),@StartTime(datetime)。
(2)判断“收文主表”中每条记录的办理阶段ID字段值。如果办理阶段ID为1,则@EndTime为该记录中“回复时间”字段的值;如果办理阶段ID为2,则@EndTime为该记录中“拆除时间”字段的值;如果办理阶段ID为3,则@EndTime为该记录中“立案时间”字段的值;如果办理阶段ID为4,则@EndTime为该记录中“处罚时间”字段的值;如果办理阶段ID为5,则@EndTime为该记录中“结案时间”字段的值。
(3)如果收文主表.办理阶段ID = 5,@StartTime = 收文主表.处罚时间;其他情况下,@StartTime = 收文主表.案发时间。
(4)求@StartTime和@EndTime的差值(DateDiff(day,@StartTime,@EndTime))。如果该差值小于0,收文主表.收文状态 = 1;如果该差值大于0小于等于办理阶段.催办期限,则收文主表.收文状态 = 2;如果差值大于办理阶段.催办期限,则收文主表.收文状态 = 3。

由于两个表中的相互引用很多,我对sql又很不熟悉,所以请大家帮帮忙!谢谢了。
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny1160 2006-09-29
  • 打赏
  • 举报
回复
TO tx1icenhe(冒牌马可 V0.3) :

太谢谢你了!能够成功运行。

现在结帖。散分。
tx1icenhe 2006-09-29
  • 打赏
  • 举报
回复
declare @i int
update a
set @i=datediff(day,case when a.办理阶段ID=5 then a.处罚时间
else a.案发时间 end,
case a.办理阶段ID when 1 then a.回复时间
when 2 then a.拆除时间
when 3 then a.立案时间
when 4 then a.处罚时间
when 5 then 结案时间
end),
收文状态 =case when @i <= 0 then 1
when @i > 0 and @i<=b.催办期限 then 2
else 3
end
from 收文主表 a,办理阶段 b
where a.办理阶段ID = b.ID

中国风 2006-09-29
  • 打赏
  • 举报
回复
楼主的问题测试的数据贴出来

34,590

社区成员

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

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