J'utilise SQL Server 2014. J'ai une table (environ 1 million d'enregistrements) dans ma base de données appelée 'ReservationStayDate'. Un extrait est présenté ci-dessous :
ResaID StayDate BookingDate
253 2016-02-10 2016-01-15
253 2016-02-11 2016-01-15
253 2016-02-12 2016-01-15
321 2016-05-03 2016-02-21
321 2016-05-04 2016-02-21
...et la liste est longue. J'ai besoin d'extraire des données du tableau ReservationStayDate sur la base des critères ci-dessous (qui est un tableau dans un fichier Excel) :
PromoName BookingDateStart BookingDateEnd StayDateStart StayDateEnd
Promo1 2016-01-10 2016-01-30 2016-02-08 2016-02-15
Promo2 2016-03-04 2016-04-30 2016-06-01 2016-06-14
Promo3 2016-03-06 2016-04-20 2016-06-20 2016-06-27
...et la liste continue avec environ 100 noms de promotion et leurs critères de date respectifs. La logique ici est que tous les enregistrements dans la table ReservationStayDate WHERE BookingDate est entre ' 2016-01-10' et '2016-01-30' AND StayDate est entre '2016-02-08' et '2016-02-15' seront marqués comme 'Promo1'.
J'ai exporté ce fichier Excel dans son format original vers une table (appelée PromoName) dans ma base de données SQL Server.
Le résultat que je recherche est le suivant :
ResaID MinStayDate MaxStayDate BookingDate PromoName
253 2016-02-10 2016-02-12 2016-01-15 Promo1
321 2016-05-03 2016-05-04 2016-02-21 NULL
...et ainsi de suite. Si un ResaID ne correspond pas aux critères mentionnés pour chaque PromoName dans la table PrmoName, alors la sortie pour ce ResaID montrera un NULL sous la colonne PromoName de la sortie T-SQL (comme indiqué pour le ResaID 321 ci-dessus). Il devient vraiment fastidieux de modifier ma requête T-SQL à chaque fois pour extraire des données pour chacun des PromoNames mentionnés dans le tableau PromoName.
J'aimerais pouvoir JOINDRE ma table PromoName à la table ReservationStayDate, mais je suis bloqué quant à la façon d'effectuer la jointure et aussi quant à la façon d'écrire la logique T-SQL qui permettra d'obtenir le résultat souhaité.
Hypothèse : il n'y a pas de chevauchement de dates entre les PromoNames et les StayDates.
Avez-vous des idées sur la façon d'y parvenir ?