if OBJECT_ID('A')is not null
drop table A
go
if OBJECT_ID('B')is not null
drop table B
go
create table A(
账号 nvarchar(2),
姓名 varchar(8),
任务名称 varchar(8),
任务下达日期 date,
要求完成日期 date
)
go
insert A
select '1','赵','电话回访','2014-07-01','2014-07-05' union all
select '2','钱','电话回访','2014-07-01','2014-07-05' union all
select '3','孙','电话回访','2014-07-01','2014-07-05'
go
create table B(
账号 nvarchar(2),
姓名 varchar(8),
任务名称 varchar(8),
录入日期 date
)
go
insert B
select '1','赵','电话回访','2014-07-02' union all
select '2','钱','电话回访','2014-07-06'
go
select * from A
select * from B
--表A:
--账号 姓名 任务名称 任务下达日期 要求完成日期
--1 赵 电话回访 2014-07-01 2014-07-05
--2 钱 电话回访 2014-07-01 2014-07-05
--3 孙 电话回访 2014-07-01 2014-07-05
--表B:
--账号 姓名 任务名称 录入日期
--1 赵 电话回访 2014-07-02
--2 钱 电话回访 2014-07-06
需要得到的查询结果:
账号 姓名 任务名称 任务下达日期 要求完成日期 完成情况
1 赵 电话回访 2014-07-01 2014-07-05 已完成
2 钱 电话回访 2014-07-01 2014-07-05 完成超时
3 孙 电话回访 2014-07-01 2014-07-05 未完成
即:表A是任务表,表B是录入的完成情况表
因需要在此基础上用前端程序使用条件查询,能否将其写到一个视图中?语法是?
------解决方案--------------------
select c.帐号,c.姓名,c.任务名称,c.任务下达日期,c.任务完成日期,
case when c.录入日期 between c.任务下达日期 and c.任务完成日期 then '已完成'
when c.录入日期 is null then '未完成'
else '完成超时' end as '完成情况'
from (
select a.*,B.录入日期 from a left join B on a.帐号=B.账号 and a.任务名称=B.任务名称
)c
------解决方案--------------------
下面这个方法有点麻烦
select a.*,完成情况=‘未完成’ into c from a
update c set c.完成情况='已'完成' from b where c.帐号=b.帐号 and c.任务名称=b.任务名称 and b.录入日期 between c.任务下达日期 and c.要求完成日期
update c set c.完成情况='完成超时' from b where c.帐号=b.帐号 and c.任务名称=b.任务名称 and b.录入日期 not between c.任务下达日期 and c.要求完成日期
select * from c
其实简化成这样:
select a.*,'未完成' as 完成情况 into c from a
update c set c.完成情况=case when b.录入日期 between c.任务下达日期 and c.任务完成日期 then '已完成' else '完成超时' end from b where c.帐号=b.账号 and c.任务名称=b.任务名称
select * from c
------解决方案--------------------
select a.*,完成情况='未完成' into c from a
update c set c.完成情况='已完成' from b where c.帐号=b.帐号 and c.任务名称=b.任务名称 and b.录入日期 between c.任务下达日期 and c.要求完成日期
update c set c.完成情况='完成超时' from b where c.帐号=b.帐号 and c.任务名称=b.任务名称 and b.录入日期 not between c.任务下达日期 and c.要求完成日期 and c.完成情况!='已完成'
select * from c
试一下上面的语句