我在处理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'
任何帮助都将非常感谢:)
答案 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函数加入字段,则可能存在空值且可能不止一个......但我可能会因为您的数据问题可能在任何地方而关闭。