我有一个使用Microsoft Dynamics 2011创建的视图,我现在希望将其转换为在Excel中使用的SQL代码。
除了OR子句之外,我已经完成了其他所有工作(查询不会返回我期望的所有结果)。我对SQl很新,任何帮助都会非常感激。
AND (Child.btb_childhealthlastlacmedical is NULL
OR Child.btb_childhealthlastlacmedical <= DATEADD(month, -12, GETDATE()))
AND (Child.btb_childhealthlastdentaldate is NULL
OR Child.btb_childhealthlastdentaldate <= DATEADD(month, -12, GETDATE()))
AND (Child.btb_childhealthlastopticiandate is NULL
OR Child.btb_childhealthlastopticiandate <= DATEADD(month, -24, GETDATE()))
最终编辑解决方案下面的xQbert解决方案。非常感谢你!!
答案 0 :(得分:1)
我认为你正在寻找更像这样的东西。但您可能想要而不是或在括号内。不确定你在寻找什么。但基本上你需要用或代替和
来分隔语句 AND (Child.btb_childhealthlastlacmedical is NULL OR
Child.btb_childhealthlastlacmedical <= DATEADD(month, -12, GETDATE()))
OR
(Child.btb_childhealthlastdentaldate is NULL OR
Child.btb_childhealthlastdentaldate <= DATEADD(month, -12, GETDATE()))
OR
(Child.btb_childhealthlastopticiandate is NULL OR
Child.btb_childhealthlastopticiandate <= DATEADD(month, -24, GETDATE()))
答案 1 :(得分:0)
如果任何字段符合条件
,则返回trueAND ( COALESCE(Child.btb_childhealthlastlacmedical,
DATEADD(month, -12, GETDATE())) <= DATEADD(month, -12, GETDATE())
OR COALESCE(Child.btb_childhealthlastdentaldate ,
DATEADD(month, -12, GETDATE())) <= DATEADD(month, -12, GETDATE())
OR COALESCE(Child.btb_childhealthlastopticiandate ,
DATEADD(month, -12, GETDATE())) <= DATEADD(month, -24, GETDATE())
)
您还希望将右外连接更改为JOIN(有时称为内连接)这可能是您获得比预期更多结果的原因。
答案 2 :(得分:0)
- RIGHT OUTER JOINS意味着dbo.FilteredContactcontact是包含所有记录的表。然后来自dbo.filteredAccount的记录与child中的记录相匹配,然后记录匹配的filteredBusinessUnit中的记录。因此,fil.name过滤器属于连接。
子表上的过滤器属于右表。我真的很惊讶没有其他人抓住我...
SELECT Child.fullname AS Child
FROM dbo.FilteredBusinessUnit Fil
RIGHT JOIN dbo.FilteredAccount Family
ON Fil.businessunitid=Family.owningbusinessunit
RIGHT JOIN dbo.FilteredContact Child
ON Child.accountid=Family.accountid
WHERE (Child.btb_childhealthlastlacmedical is NULL
OR Child.btb_childhealthlastlacmedical <= DATEADD(month, -12, GETDATE())
OR Child.btb_childhealthlastdentaldate is NULL
OR Child.btb_childhealthlastdentaldate <= DATEADD(month, -12, GETDATE())
OR Child.btb_childhealthlastopticiandate is NULL
OR Child.btb_childhealthlastopticiandate <= DATEADD(month, -24, GETDATE()) )
AND Child.customertypecode = 1
AND Child.owningbusinessunit = 'North West'
注意使用外连接时,除了“所有记录表(此情况下为FilteredContact)”之外的表上的任何限制条件都应放在连接上,否则外连接将被取消,其行为类似于内连接。
我不确定你为什么要进行空检查,因为有些记录是空的,或者你有空检查以保留来自外连接的记录。如果后者那么这样我们就不需要空检查了。如果是第一个,那么我们需要保持空检查。