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!