我正在创建一个跟踪客户联系的数据库,初始联系的目标联系日期是自定制调用我们的第一个日期起90个工作日,我已创建了一个处理此计算的函数。
我有一个客户联系日志表,其中输入了所有联系人。
我在mssql2005中设置了一个邮件脚本,当没有联系或在90天后输入日志时,它会向管理员电子邮箱发送一个列表。
我正在努力使用sql来确定是否存在联系人,或者是否存在联系但是已被破坏,请查看下面的我的脚本:
我试图让它尽可能可读。
DECLARE @tmp INT
SELECT m.id AS
[Case ID],
CONVERT(VARCHAR, userdbjhv25.dbo.Calcdate(oc.firstdate), 103) AS
[Target Contact Date]
FROM userdbjhv25.dbo.USER v,
userdbjhv25.dbo.customer o,
userdbjhv25.dbo.maincase m,
userdbjhv25.dbo.usercase vc,
userdbjhv25.dbo.customercase oc,
contactlist r
WHERE m.id = vc.caseid
AND v.userid = vc.userid
AND m.id = oc.caseid
AND o.customerid = oc.customerid
AND userdbjhv25.dbo.Calcdate(oc.firstdate) <= Getdate()
AND ( @tmp IS NOT NULL
AND NOT EXISTS (SELECT 1
FROM contactlist r1
WHERE r1.caseno = vc.usercase
AND r1.conlogtype = 'Initial Contact')
OR (( @tmp IN(SELECT 1
FROM contactlist r2,
usercase vc2,
USER v2,
customercase oc2,
maincase m2,
customer o2
WHERE m2.id = oc2.caseid
AND o2.customerid = oc2.customerid
AND r2.conlogtype = 'Initial Contact'
AND r2.caseno = vc.usercase
AND
userdbjhv25.dbo.Calcdate(oc2.firstdate) < r2.postdate
)
)) )
答案 0 :(得分:0)
我认为左联盟将成为你的朋友。我无法充分可视化您的架构,但左(或右连接)背后的想法是数据可能不存在于其中一个数据集中。发生这种情况时,会返回一行满空的行。但是当它匹配时,你会得到匹配的数据。所以,有些psedo代码:
select m.id AS [Case ID],
CONVERT(VARCHAR, userdbjhv25.dbo.Calcdate(oc.firstdate), 103) AS [Target Contact Date]
from userdbjhv25.dbo.customer o
left join userdbjhv25.dbo.customercase oc
on o.customerid = oc.customerid
where oc.firstdate is null or datediff(day, oc.firstdate, getdate()) > 90
根据你的架构进行调整,你应该好好去。