큰 저장 프로 시저로 작업하고 있는데, 일부만 문제가 있습니다.SQL - OutterApply 및 Left Join
im 결합 테이블에 대해 쿼리를 실행하면 0, 1 또는 2 개의 결과가있을 수 있습니다. 0 개의 결과가 있다면, 나는 상관하지 않는다. 내 코드는 null 값을 리턴한다. 결과가 1 개인 경우 올바른 값을 반환하지만 결과가 2 개인 경우 두 번째 결과를 선택하는 데 문제가 있습니다.
아래 코드는 두 번째 OutterApply (AHM2 항목)까지 작동합니다. 누구든지 내가 뭘 잘못하고 있는지 알아?
동물 ID는 두 가지 OuterApply에 대해 동일합니다. 두 번째 결과가있는 경우 첫 번째 결과와 동일하지 않은 경우 두 번째 결과 만 반환하면됩니다.
SELECT TOP 1
AHM.AnimalHerdManagementId,
AHM.HerdManagementId,
AHM2.AnimalHerdManagementId,
AHM2.HerdManagementId,
HM.Code AS HerdManagementCode,
HM2.Code AS HerdManagementCode2
OUTER APPLY
(
SELECT TOP 1 AHM.AnimalHerdManagementId, AHM.HerdManagementId
FROM dbo.AnimalHerdManagement AHM
WHERE AHM.AnimalId = A.AnimalId AND ISNULL(AHM.EffectiveFrom, @EffectiveFrom) <= @EffectiveFrom
ORDER BY AHM.EffectiveFrom DESC
) AHM
LEFT JOIN dbo.HerdManagement HM ON AHM.HerdManagementId = HM.HerdManagementId
OUTER APPLY
(
SELECT TOP 1 AHM2.AnimalHerdManagementId, AHM2.HerdManagementId
FROM dbo.AnimalHerdManagement AHM2
WHERE AHM2.AnimalId = A.AnimalId AND AHM2.AnimalHerdManagementId != AHM.AnimalHerdManagementId AND ISNULL(AHM2.EffectiveFrom, @EffectiveFrom) <= @EffectiveFrom
ORDER BY AHM2.EffectiveFrom DESC
) AHM2
LEFT JOIN dbo.HerdManagement HM2 ON AHM2.HerdManagementId = HM2.HerdManagementId
난 그렇게 내 첫 번째 노력은 그들에게 하나의 행에 박제 반환하려고 노력하는 대신 두 개의 행을 반환하는 것, 조금 게으른입니다. 열을 행으로 바꾸는 것이 PITA라는 것은 제 경험이었습니다. 그럴 가능성이 있니? – KingOfAllTrades
불행히도. 나는 단지 기존 sp를 수정하고있다. 그리고이 열을 추가하십시오. 정말 그것을 바꿀 수 있습니다. 많은 것에 달려 있습니다. – Mark
나는 많은 것을 알았다. 그렇지 않으면 아마 이런 식으로하지 않을 것이다. 그러나 나는 조금 게으른 사실을 서언 했었습니다 ... 당신이 얻고있는 결과를 게시 할 수 있습니까? – KingOfAllTrades