날짜가있는 일치하는 레코드가없는 경우 null 레코드를 표시하고 싶습니다.
는 NULL 값을 포함 할 경우, 당신은 아마 왼쪽 외부 (또는 "LEFT 가입") 가입이 필요합니다 조인에 대해
SELECT a.RacLetterId, a.AppealsLevelId, b.AppealLevelId, a.Level, a.DateSent, a.DeliveryService, b.AppealOutcomeId, b.AppealOutcomeDate
FROM dbo.tbl_Tab_AppealsLevel a
LEFT JOIN
(
SELECT AppealLevelId, AppealOutcomeId,AppealOutcomeDate
FROM dbo.tbl_Tab_AppealCode
WHERE AppealLevel = 1
) b
ON (AppealLevelId = a.AppealsLevelId)
WHERE Level = 1
자세한 내용은 제프 Atwoord의 CODING HORROR: A Visual Explanation of SQL Joins
추천
가장 최근의 AppealOutcomeDate를 표시하고 싶습니다. 날짜가 중복의 변화 값으로 만 열 경우
, 당신은 다른 모든 컬럼에 대한 간단한 GROUP BY
를 사용하고 다른 열 만약 MAX(AppealOutcomeDate)
SELECT a.RacLetterId, a.AppealsLevelId, b.AppealLevelId, a.Level, a.DateSent, a.DeliveryService, b.AppealOutcomeId, MAX(b.AppealOutcomeDate)
FROM dbo.tbl_Tab_AppealsLevel a
LEFT JOIN
(
SELECT AppealLevelId, AppealOutcomeId,AppealOutcomeDate
FROM dbo.tbl_Tab_AppealCode
WHERE AppealLevel = 1
) b
ON (AppealLevelId = a.AppealsLevelId)
WHERE Level = 1
GROUP BY a.RacLetterId, a.AppealsLevelId, b.AppealLevelId, a.Level, a.DateSent, a.DeliveryService, b.AppealOutcomeId
를 선택할 수 있습니다 '값이 (변화하는 날짜와 관련하여) 변화, 그리고이 (가) 중복 데이터의 원인이되는 결합이다, 당신은 ON 절 당신의 가입의에 하위 쿼리를 추가 할 수 있습니다
SELECT a.RacLetterId, a.AppealsLevelId, b.AppealLevelId, a.Level, a.DateSent, a.DeliveryService, b.AppealOutcomeId, b.AppealOutcomeDate
FROM dbo.tbl_Tab_AppealsLevel a
LEFT JOIN
(
SELECT AppealLevelId, AppealOutcomeId,AppealOutcomeDate
FROM dbo.tbl_Tab_AppealCode
WHERE AppealLevel = 1
) b
ON AppealLevelId = a.AppealsLevelId
AND AppealOutcomeDate =
(
SELECT MAX(AppealOutcomeDate)
FROM dbo.tbl_Tab_AppealCode
WHERE AppealLevel = 1
AND AppealLevelId = a.AppealsLevelId
)
WHERE Level = 1
두 번째 예는 내가 필요에 너무 가깝습니다. 유일한 다른 문제는 중복 레코드를 보여줍니다. 'DISTINCT'키워드를 사용하여 문제가 해결되었습니다! 이것은 그것을했다! JDB에 감사드립니다! –
@TravisGrannan - 내가 말했듯이, 두 번째 예제는 중복 데이터를 생성하는 조인 인 경우에만 작동합니다. 주 테이블에 중복 데이터가있는 것 같습니다 (조인 이전). – JDB
@JBD - 전혀 짜증나지 않고 서비스를 갚았습니다. – Hogan