私はSQL Server 2014を使用しています。私のデータベースには、「ReservationStayDate」というテーブル(約100万レコード)があります。以下に抽出物を示す:T-SQLクエリで日付についてこのロジックを渡すには?
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
...リストが続きます。 は、私は(Excelファイル内のテーブルである)以下の基準に基づいてReservationStayDateテーブルからデータを抽出する必要があります。
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
...と、リストには約100 PromoNamesと、それぞれの日付のcriteriasにに行きます。ここでのロジックは、ReservationStayDateテーブルWHERE BookingDateのすべてのレコードが '2016-01-10'と '2016-01-30'の間にあり、StayDateが '2016-02-08'と '2016-02-15'の間にあることです「Promo1」とタグ付けされます。
このExcelファイルを元の形式でSQL Serverデータベースのテーブル(PromoName)にエクスポートしました。
次のように私が探しています出力は次のようになりますように
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
を...と。 ResaIDがPrmoNameテーブルの各PromoNameに記載されている基準に該当しない場合、そのResaIDの出力はT-SQL出力のPromoName列の下にNULLを表示します(前述のResaID 321を参照)。 PromoNameテーブルに記載されている各PromoNamesのデータを抽出するたびに、自分のT-SQLクエリを変更するのは本当に面倒です。
私はReservationStayDateテーブルで私のPromoNameテーブルをジョインできるようにしたいと思いますが、私はどのようにジョインしていますか、また、私の希望する出力を満たすT-SQLロジックを書く方法について固執しています。
前提条件:PromoNamesとStayDatesの間に重複する日付はありません。
これを達成するためのアイデアはありますか?
それが動作するはずですか、すべて私たちは何かが間違っていた場合は、同様にその要件に対処するための簡単な変更を行うことができます。ありがとう – Susang
これは良い見えます、私はOPが最初にすべての情報を与えて欲しいです。 –
@Surazあなたの解決に感謝します。私はそれを試して、それがどうなるか見てみましょう。 – user3115933