DECLARE @DataSource TABLE
(
[RecordID] TINYINT PRIMARY KEY
);
DECLARE @DataSourceDates01 TABLE
(
[RecordID] TINYINT PRIMARY KEY
,[StartDate] DATETIME2
,[EndDate] DATETIME2
);
DECLARE @DataSourceDates02 TABLE
(
[RecordID] TINYINT PRIMARY KEY
,[StartDate] DATETIME2
,[EndDate] DATETIME2
);
DECLARE @DataSourceDates03 TABLE
(
[RecordID] TINYINT PRIMARY KEY
,[StartDate] DATETIME2
,[EndDate] DATETIME2
);
INSERT INTO @DataSource ([RecordID])
VALUES (1), (2), (3);
INSERT INTO @DataSourceDates01 ([RecordID], [StartDate], [EndDate])
VALUES (1, GETUTCDATE(), GETUTCDATE());
INSERT INTO @DataSourceDates02 ([RecordID], [StartDate], [EndDate])
VALUES (1, GETUTCDATE(), GETUTCDATE())
,(2, GETUTCDATE(), GETUTCDATE());
INSERT INTO @DataSourceDates03 ([RecordID], [StartDate], [EndDate])
VALUES (1, GETUTCDATE(), GETUTCDATE())
,(2, GETUTCDATE(), GETUTCDATE())
,(3, GETUTCDATE(), GETUTCDATE());
SELECT DS.[RecordID]
,COALESCE(DS1.[StartDate], DS2.[StartDate], DS3.[StartDate]) AS [StartDate]
,COALESCE(DS1.[EndDate], DS2.[EndDate], DS3.[EndDate]) AS [EndDate]
FROM @DataSource DS
LEFT JOIN @DataSourceDates01 DS1
ON DS.[RecordID] = DS1.[RecordID]
LEFT JOIN @DataSourceDates02 DS2
ON DS.[RecordID] = DS2.[RecordID]
LEFT JOIN @DataSourceDates03 DS3
ON DS.[RecordID] = DS3.[RecordID];
Ich bin ein wenig unklar, auf welcher OP bedeutet durch „die letzte Abfrage nicht null ist“. Würde es in diesem Fall in Tabelle 4 einen Eintrag geben? Wenn nicht, würde ich vorschlagen, diese Lösung zu ändern, um LEFT JOIN anstelle von INNER JOIN zu verwenden. – Brett
Ja, Sie haben Recht. Die Antwort wurde geändert. –