3 Stimmen

Rückgabe von NULLs in SQL, wenn die verbundene Tabelle keine Datensätze für dieses Datum enthält

Guten Morgen zusammen. Ich kämpfe schon seit einiger Zeit mit diesem Problem und kann es nicht richtig einordnen.

Ich habe also zwei Tabellen in meiner Datenbank

tblDateTrans

CREATE TABLE [dbo].[tblDateTrans](
    [Date] [smalldatetime] NOT NULL,
) 

Diese Tabelle ist eine externe Kalendertabelle, die alle Daten vom 1.1.2007 bis zum 1.1.2011 enthält. Sie enthält auch zusätzliche Informationen wie z.B. Urlaubsdaten, Firmenzeiträume usw. Aber das ist für diese Frage nicht wichtig.

Meine zweite Tabelle ist

    tblSurveySession
    CREATE TABLE [dbo].[tblSurveySession](
        [surveySessionID] [int] IDENTITY(1,1) NOT NULL,
        [guestID] [int] NULL,
        [surveyID] [int] NOT NULL,
        [FK_StoreId] [int] NULL,
        [surveyCompletedDate] [datetime] NULL
)

Diese Tabelle enthält eine Liste der Umfragen, die von unseren Gästen über einen bestimmten Zeitraum verschickt und ausgefüllt wurden. FK_StoreId ist die ID der Geschäftseinheit des Unternehmens, und surveyCompletedDate enthält nur Datumsangaben und keine Zeitangaben.

Mein Ziel ist es, eine Liste von surveySessionIDs und Daten mit einem LEFT OUTER JOIN auf der Tabelle tblDateTrans zurückzugeben, möchte ich alle Daten zurückgeben, unabhängig davon, ob es Werte gibt. Also habe ich versucht, diese Abfrage auszuführen:

SELECT     tblDateTrans.Date, dbo.tblSurveySession.surveySessionID, dbo.tblSurveySession.FK_StoreId
FROM         OPENQUERY([APOLLO], 'select Date FROM apollo.nhcglobal.dbo.tblDateTrans') AS tblDateTrans LEFT OUTER JOIN
                      dbo.tblSurveySession ON tblDateTrans.Date = dbo.tblSurveySession.surveyCompletedDate
WHERE     (tblDateTrans.Date >= '1/1/2010') AND (tblDateTrans.Date <= '2/1/2010') AND (dbo.tblSurveySession.FK_StoreId = 4)

Meine zurückgegebenen Daten sehen wie folgt aus:

Date                    surveySessionID     FK_StoreId
2010-01-01 00:00:00.000     12702           4
2010-01-01 00:00:00.000     12736           4
2010-01-01 00:00:00.000     12456           4
2010-01-03 00:00:00.000     12662           4
2010-01-04 00:00:00.000     12660           4
2010-01-05 00:00:00.000     12510           4
2010-01-05 00:00:00.000     12889           4
2010-01-24 00:00:00.000     13751           4
2010-01-25 00:00:00.000     13793           4
2010-01-28 00:00:00.000     13958           4
2010-01-30 00:00:00.000     14059           4
2010-01-31 00:00:00.000     14139           4

Mein Ziel ist es, dass die Abfrage die Daten wie folgt zurückgibt:

Date                    surveySessionID     FK_StoreId
2010-01-01 00:00:00.000     12702           4
2010-01-01 00:00:00.000     12736           4
2010-01-01 00:00:00.000     12456           4
2010-01-02 00:00:00.000     NULL            NULL
2010-01-03 00:00:00.000     12662           4
2010-01-04 00:00:00.000     12660           4
2010-01-05 00:00:00.000     12510           4
2010-01-05 00:00:00.000     12889           4
2010-01-06 00:00:00.000     NULL            NULL
2010-01-07 00:00:00.000     NULL            NULL
2010-01-08 00:00:00.000     NULL            NULL
2010-01-09 00:00:00.000     NULL            NULL
2010-01-10 00:00:00.000     NULL            NULL
2010-01-11 00:00:00.000     NULL            NULL
2010-01-12 00:00:00.000     NULL            NULL
2010-01-13 00:00:00.000     NULL            NULL
2010-01-14 00:00:00.000     NULL            NULL
2010-01-15 00:00:00.000     NULL            NULL
2010-01-16 00:00:00.000     NULL            NULL
2010-01-17 00:00:00.000     NULL            NULL
2010-01-18 00:00:00.000     NULL            NULL
2010-01-19 00:00:00.000     NULL            NULL
2010-01-20 00:00:00.000     NULL            NULL
2010-01-21 00:00:00.000     NULL            NULL
2010-01-22 00:00:00.000     NULL            NULL
2010-01-23 00:00:00.000     NULL            NULL
2010-01-24 00:00:00.000     13751           4
2010-01-25 00:00:00.000     13793           4
2010-01-28 00:00:00.000     13958           4
2010-01-30 00:00:00.000     14059           4
2010-01-31 00:00:00.000     14139           4

Ich dachte, ein LEFT OUTER JOIN würde die Abfrage zwingen, alle Daten zu betrachten und NULLS an Tagen zurückzugeben, die surveySessionIDs und FK_StoreIds fehlen. Wir sind bei anderen Projekten schon einmal auf diese Art von Problem gestoßen, so dass die Lösung dieses Problems eine große Hilfe für uns in der Zukunft sein würde. Ich danke Ihnen allen für Ihre Hilfe!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X