如何在没有重复数据SQL的情况下使用多个联接

时间:2018-03-16 18:24:31

标签: sql excel-vba vba excel

我在处理SQL数据时遇到问题,一旦我完成了多个连接,我就会得到重复的数据。

这是为

编写的代码
SELECT RPPlannedLabor.PeriodHrs, RPPlannedLabor.StartDate, (RPAssignment.WBS1 + ' ' + PR.Name) AS 'WBS1',  RPAssignment.WBS2, EM.FirstName, EM.LastName, EM.TKGroup, (EM.FirstName + ' ' + EM.LastName) AS 'Full Name'
FROM  RPPlannedLabor
LEFT OUTER JOIN RPAssignment
ON RPPlannedLabor.AssignmentID = RPAssignment.AssignmentID
AND RPAssignment.WBS1 IS NOT NULL
LEFT OUTER JOIN EM
ON RPAssignment.ResourceID = EM.Employee
AND EM.Status = 'a'
LEFT OUTER JOIN PR
ON ((RPAssignment.WBS1 = PR.WBS1)
AND (ISNULL(RPAssignment.WBS2,0) = ISNULL(PR.WBS2,0))
AND (ISNULL(RPAssignment.WBS3,0) = ISNULL(PR.WBS3,0)))
AND PR.Sublevel = 'Y'

任何帮助都将非常感谢:)

1 个答案:

答案 0 :(得分:1)

我必须猜测你在连接中的isnull部分是找到一堆空字段和交叉连接,但这只是一个猜测。像这样的数据问题在代码帮助论坛上无法真正解决,我能做的最好就是教你麻烦拍摄。

运行此命令并获取行计数:

 SELECT count(1)
 FROM  RPPlannedLabor

运行此

SELECT count(1)
FROM  RPPlannedLabor
LEFT OUTER JOIN RPAssignment
ON RPPlannedLabor.AssignmentID = RPAssignment.AssignmentID
AND RPAssignment.WBS1 IS NOT NULL

与第一个查询比较...如果计数增加,您的副本就会出现在第一个查询中。

不增加?继续迭代,运行:

SELECT count(1)
FROM  RPPlannedLabor
LEFT OUTER JOIN RPAssignment
ON RPPlannedLabor.AssignmentID = RPAssignment.AssignmentID
AND RPAssignment.WBS1 IS NOT NULL
LEFT OUTER JOIN EM
ON RPAssignment.ResourceID = EM.Employee
AND EM.Status = 'a'

与上面的计数比较。是否有更多记录或是否相同?更多记录意味着我们添加的最后一个连接导致它们。如果不是......我的猜测是这里导致重复:

LEFT OUTER JOIN PR
ON ((RPAssignment.WBS1 = PR.WBS1)
AND (ISNULL(RPAssignment.WBS2,0) = ISNULL(PR.WBS2,0))
AND (ISNULL(RPAssignment.WBS3,0) = ISNULL(PR.WBS3,0)))
AND PR.Sublevel = 'Y'

如果您正在使用isnull函数加入字段,则可能存在空值且可能不止一个......但我可能会因为您的数据问题可能在任何地方而关闭。