【发布时间】:2018-09-22 00:29:09
【问题描述】:
我一直在努力解决这个问题,但还没有找到解决方案。我正在处理一个 SQL 视图,其结果基于某些条件。我的 SQL 视图如下
ALTER VIEW [dbo].[vAeoiCaseClose]
AS
SELECT CaseReference, s.AccessNumber
FROM dbo.AeoiSdtTemp s
JOIN AeoiCaseManagement c on c.AccessNumber = s.AccessNumber
JOIN AeoiCaptureLog a on a.AccessNumber = c.AccessNumber
WHERE AscertainMethodId IS NOT NULL
AND c.StatusCode = 15 AND a.StatusCode IN (6, 13, 15)
AND DATEDIFF(dd, s.LastModifiedDate, GETDATE()) <= 80 AND DATEDIFF(dd, a.LastModifiedDate, GETDATE()) <= 80
AND (
(AscertainMethodId = 1 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 2 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 2 AND ExtendedStatusId = 4)
OR (AscertainMethodId = 3 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 3 AND ExtendedStatusId = 4)
OR (AscertainMethodId = 4 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 5 AND ExtendedStatusId = 1)
OR (AscertainMethodId = 5 AND ExtendedStatusId = 4)
)
GO
我必须添加另一个条件,所以这些记录也可以作为视图的结果。
条件:
在某些情况下,dbo.AeoiSdtTemp 中可能有 2 条记录具有相同的 (AccessNumber) 但不同的 (AscertainMethodId) ,在这种情况下,该记录在 AeoiCaptureLog 中将不可用strong> 表,但我需要这些作为视图结果的一部分。
请提出建议。感谢帮助。
例子:
dbo.AeoiSdtTemp
(AccessNumber) - 1111 (AscertainMethodId) - 3 StatusCode = 15
(AccessNumber) - 1111 (AscertainMethodId) - 5 StatusCode = 11
dbo.AeoiCaptureLog
- 没有记录
dbo.AeoiCaseManagement
- (AccessNumber) - 1111 (AscertainMethodId) - 3 StatusCode = 15
【问题讨论】:
-
您是否尝试过左连接而不是左连接 AeoiCaptureLog a on a.AccessNumber = c.AccessNumber
-
@Fact 对于视图中的现有条件,我当然需要所有 3 个表中的记录,但我还需要一个异常条件,即 AeoiCapturelog 中没有记录。
标签: mysql sql sql-server join sql-view