我想顯示空記錄,如果沒有與日期相匹配的記錄。
如果你想包括NULL值,那麼你可能需要一個LEFT OUTER JOIN(或只是 「LEFT JOIN」):
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
如果其他支柱「值變化(相對於改變日期),以及它的加入,這是造成重複數據,那麼你可以一個子查詢添加到您的JOIN的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
@JDD - 我根本沒有煩惱,我正在償還這項服務。 – Hogan