2017-04-11 1 views
2

Ich möchte Daten aus einer Tabelle für einen bestimmten Datumsbereich zurückgeben. Dafür habe ich eine gespeicherte Prozedur, die @fromDate und @toDate Parameter akzeptiert.Wie können leere Daten zurückgegeben werden, auch wenn es für einen bestimmten Bereich keine gibt?

Die SQL sieht wie folgt aus:

DECLARE @fromDate DATETIME, @toDate DATETIME 

SET @fromDate = '2017-04-01' 
SET @toDate = '2017-04-07' 

SELECT MD.ID, MD.Name, RT.Result, RT.DateOn 
FROM MainData MD 
    LEFT JOIN ResultsTable RT 
    RT.MainDataID = MD.ID 
WHERE RT.DateOn >= @fromDate AND RT.DateOn <= @toDate 

Dies funktioniert wie erwartet und gibt die Ergebnisse in diesem Bereich, aber mein Problem ist, dass ich leer Ergebnisse auch zurückkehren wollen, wenn es keine Ergebnisse in der ResultsTable sind. Grundsätzlich, wenn ich Ergebnisse für einen Zeitraum von 7 Tagen anfordere, sollte ich 7 Ergebnisse bekommen, wobei einige oder alle nicht existent sein könnten.

Ich habe versucht, eine Dummy-Tabelle mit den Daten in diesem Bereich zu schaffen, aber ich bin nicht sicher, wie es mit den anderen SQL beitreten: wird

INSERT INTO #tempDates 
SELECT DATEADD(DAY, nbr - 1, @fromDate) 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY c.object_id) AS Nbr 
      FROM  sys.columns c 
     ) nbrs 
WHERE nbr - 1 <= DATEDIFF(DAY, @fromDate, @toDate) 

Jede Hilfe sehr seine

+0

Bitte geben Sie eine Probe von Daten in der Hauptdatentabelle und Ihre Ergebnistabelle, und auch, wie das sa mple Daten sollten nach Ihrem Endergebnis suchen. Tun Sie es in der Form 'declare @ MainData table (Id int ...); Einfügen in @MainData-Werte ... ' – BeanFrog

Antwort

2

geschätzt verschieben das Datum Bedingungen von der WHERE Klausel der ON Klausel:

SELECT MD.ID, MD.Name, RT.Result, RT.DateOn 
FROM MainData MD 
LEFT JOIN ResultsTable RT 
    ON RT.MainDataID = MD.ID AND 
     RT.DateOn BETWEEN @fromDate AND @toDate 
Verwandte Themen