![Excel 2007 で動的な日付範囲を持つ SQL クエリを作成するにはどうすればよいですか?](https://rvso.com/image/1317557/Excel%202007%20%E3%81%A7%E5%8B%95%E7%9A%84%E3%81%AA%E6%97%A5%E4%BB%98%E7%AF%84%E5%9B%B2%E3%82%92%E6%8C%81%E3%81%A4%20SQL%20%E3%82%AF%E3%82%A8%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
特定の期間のレポートを印刷できるレポート スプレッドシートを作成しようとしています。以下のクエリは機能しますが、?
日付の代わりにパラメーターを使用しようとすると、日付を含むセルを選択した後にエラーが発生します。一重引用符を使用すると、('?')
文字列から日付/時刻への変換に失敗し、使用しないと、(?)
の近くで構文エラーが発生します@p1
。
最終的には、データを重要な情報に絞り込むために、開始日と終了日、または開始日時に対して月またはシフトを追加する数式が必要になります。クエリは Microsoft Query で作成されました。
SELECT FloatTable.DateAndTime,
TagTable.TagName
FROM master.dbo.FloatTable FloatTable,
master.dbo.TagTable TagTable
WHERE FloatTable.TagIndex = TagTable.TagIndex
AND (( FloatTable.DateAndTime >= {ts '2012-06-01 00:00:00'} ))
ご協力いただければ幸いです。
答え1
有効な SQL ステートメントが作成されるように、クエリをテキストではなく数式として入力し、選択したセルから日付を構築する必要があります。
セル A1 に日付があると仮定して、セル B1 に次の数式を入力します。
="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable _
FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = _
TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" _
& MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"
各行の末尾にあるアンダースコアは継続を示すことに注意してください。数式を機能させるには、アンダースコアと改行を削除する必要があります。数式全体は、以下の 1 行に設定されています。(このサイトでは読みにくいですが、Excel では読みやすいです!)
="SELECT FloatTable.DateAndTime, TagTable.TagName FROM master.dbo.FloatTable FloatTable, master.dbo.TagTable TagTable WHERE FloatTable.TagIndex = TagTable.TagIndex AND ((FloatTable.DateAndTime>={ts '" & YEAR(A1) & "-" & MONTH(A1) & "-" & DAY(A1) & " 00:00:00'}))"