1

複数の条件でアクセス クエリを作成しようとしています。クエリ対象のテーブルは「tblVendor」で、以下に示すように、ベンダーの出荷データに関する情報が含まれています。

ここに画像の説明を入力

2 番目のテーブルは「tblSchedule」で、各ベンダーの締め切り日のスケジュールが含まれています。この表には、データ分析の締め切り日があります。

ここに画像の説明を入力

ベンダーごとに、ShipDate >= CutoffDate を持つレコードを選択する必要があります。ここのデータには示されていませんが、複数のベンダーが同じ CutoffDate を持っている可能性があります。「tblCutoffdate」の少数のレコードについては、次のようなクエリを作成できます。

SELECT tblVendors.ShipmentId, tblVendors.VendorNumber, tblVendors.VendorName, 
tblVendors.Units, tblVendors.ShipDate
FROM tblVendors INNER JOIN tblCutoffDate ON tblVendors.VendorNumber =
tblCutoffDate.VendorNumber
WHERE (((tblVendors.VendorNumber) In (SELECT VendorNumber FROM [tblCutoffDate] WHERE 
[tblCutoffDate].[CutoffDate] = #2/1/2014#)) AND ((tblVendors.ShipDate)>=#2/1/2014#)) OR
(((tblVendors.VendorNumber) In (SELECT VendorNumber FROM [tblCutoffDate] WHERE
[tblCutoffDate].[CutoffDate] = #4/1/2014#)) AND ((tblVendors.ShipDate)>=#4/1/2014#));

必要に応じて、クエリは次のような結果を返します。

ここに画像の説明を入力

今私が懸念しているのは、「tblCutoffDate」に多くのレコードが追加されているため、クエリで日付をハードコーディングするのが難しくなっているということです。ハードコーディングせずに上記の SQL ステートメントを記述するより良い方法はありますか?

4

2 に答える 2

1

次のようなものを試すことができます-これは、過去のカットオフのないベンダー、または将来のカットオフのないベンダーを処理する必要があります

「今日」は、時間なしの日付だけに適切に変換する必要があります

比較 "=" は、両方、または 1 つ、またはなしの場合があります。 最大/最小

「null」は、Max/Min で 1/1/1900 および 12/31/3999 に置き換えることができます

SELECT tblvendors.shipmentid,
   tblvendors.vendornumber,
   tblvendors.vendorname,
   tblvendors.units,
   tblvendors.shipdate

FROM   tblvendors
LEFT JOIN 
   ( SELECT vendornum,
        Max( iif cutoffdate <  today, cutoffdate, null) as PriorCutoff,
        Min( iif cutoffdate >= today, cutoffdate, null) as NextCutoff
     FROM tblcutoffdate
     GROUP BY vendornum
   ) as VDates
ON  vendornumber = vendornum
WHERE tblvendors.shipdate BETWEEN  PriorCutoff and NextCutoff

ORDER BY  vendornumber, shipdate, shipmentid
于 2014-03-17T03:03:12.870 に答える