Excel VBA 質問スレッド №1959 (未解決)
SQL文実行時のエラーについて(ADO使用)
投稿者 : おさかな 投稿日時 : 2024/07/10(Wed) 13:40:42 OS : Windows 11 EXCEL : 未指定
タイトルと重複するのですが、
ADODBを使い、SQL文でCSVからデータを抜き出して処理をしたいと考えています。
しかし、下記のSQL文でエラーが発生してしまい、原因がわかりません。
そもそもSQLの構文エラーなのか、それともADOではこの構文は出来ないというエラーなのか、ご存じの方がいらっしゃいましたら教えてください。
SWITCHを用いない単純なSELECT~FROMだけのSQLでは実行できているので、「そもそも接続できていない」ということは無いと思います。
SELECT
SWITCH(
日付ステータス = '1ヶ月後',
DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',
DATEADD('m', 2, 今回日付),
true,
今回日付
) as 次回開催日付
FROM
[maindata.csv] data
GROUP BY
SWITCH(
日付ステータス = '1ヶ月後',
DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',
DATEADD('m', 2, 今回日付),
true,
今回日付
) as 次回開催日付
タイトルと重複するのですが、
ADODBを使い、SQL文でCSVからデータを抜き出して処理をしたいと考えています。
しかし、下記のSQL文でエラーが発生してしまい、原因がわかりません。
そもそもSQLの構文エラーなのか、それともADOではこの構文は出来ないというエラーなのか、ご存じの方がいらっしゃいましたら教えてください。
SWITCHを用いない単純なSELECT~FROMだけのSQLでは実行できているので、「そもそも接続できていない」ということは無いと思います。
SELECT
SWITCH(
日付ステータス = '1ヶ月後',
DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',
DATEADD('m', 2, 今回日付),
true,
今回日付
) as 次回開催日付
FROM
[maindata.csv] data
GROUP BY
SWITCH(
日付ステータス = '1ヶ月後',
DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',
DATEADD('m', 2, 今回日付),
true,
今回日付
) as 次回開催日付
スポンサーリンク
[返信 1] Re : SQL文実行時のエラーについて(ADO使用)
投稿者 : tkit 投稿日時 : 2024/07/11(Thu) 08:42:13
GROUP BY の後はカラム名を指定するはずですが、日付のカラム名があるんですか?
まず、基のcsvと求めたい結果の説明が必要です。
一見、構文エラーだと思いますが。
GROUP BY の後はカラム名を指定するはずですが、日付のカラム名があるんですか?
まず、基のcsvと求めたい結果の説明が必要です。
一見、構文エラーだと思いますが。
[返信 2] Re : SQL文実行時のエラーについて(ADO使用)
投稿者 : おさかな 投稿日時 : 2024/07/11(Thu) 10:28:12
■[返信 1] tkitさん(2024-07-11 08:42:13)の記事
> GROUP BY の後はカラム名を指定するはずですが、日付のカラム名があるんですか?
> まず、基のcsvと求めたい結果の説明が必要です。
> 一見、構文エラーだと思いますが。
書いてあるそのままの説明で申し訳ないのですが、
【CSVの項目】
今回日付:yyyy/m/d形式で入っている日付のデータ
日付ステータス:(1ヶ月後,2ヶ月後)のどちらかが入っている
【SQLでやりたいこと】
「日付ステータス」の内容に応じて次回開催日付を設定して、次回開催日付ごとにGROUP BYをかけたい
・日付ステータスが1ヶ月後なら今回日付 + 1ヶ月
・日付ステータスが2ヶ月後なら今回日付 + 2ヶ月
他に必要な情報があれば教えてください。
よろしくお願いします。
■[返信 1] tkitさん(2024-07-11 08:42:13)の記事
> GROUP BY の後はカラム名を指定するはずですが、日付のカラム名があるんですか?
> まず、基のcsvと求めたい結果の説明が必要です。
> 一見、構文エラーだと思いますが。
書いてあるそのままの説明で申し訳ないのですが、
【CSVの項目】
今回日付:yyyy/m/d形式で入っている日付のデータ
日付ステータス:(1ヶ月後,2ヶ月後)のどちらかが入っている
【SQLでやりたいこと】
「日付ステータス」の内容に応じて次回開催日付を設定して、次回開催日付ごとにGROUP BYをかけたい
・日付ステータスが1ヶ月後なら今回日付 + 1ヶ月
・日付ステータスが2ヶ月後なら今回日付 + 2ヶ月
他に必要な情報があれば教えてください。
よろしくお願いします。
[返信 3] Re : SQL文実行時のエラーについて(ADO使用)
投稿者 : tkit 投稿日時 : 2024/07/11(Thu) 12:11:03
■[返信 2] おさかなさん(2024-07-11 10:28:12)の記事
> 【SQLでやりたいこと】
> 「日付ステータス」の内容に応じて次回開催日付を設定して、次回開催日付ごとにGROUP BYをかけたい
> ・日付ステータスが1ヶ月後なら今回日付 + 1ヶ月
> ・日付ステータスが2ヶ月後なら今回日付 + 2ヶ月
>
以下のクエリでカラム名「次回開催日付」が加わったデータが取得できます。
SELECT
*,
SWITCH(
日付ステータス = '1ヶ月後',DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',DATEADD('m', 2, 今回日付),
true,今回日付
) as 次回開催日付"
FROM [maindata.csv]
次回開催日付でグループ化して、何を取得したいんですか?
■[返信 2] おさかなさん(2024-07-11 10:28:12)の記事
> 【SQLでやりたいこと】
> 「日付ステータス」の内容に応じて次回開催日付を設定して、次回開催日付ごとにGROUP BYをかけたい
> ・日付ステータスが1ヶ月後なら今回日付 + 1ヶ月
> ・日付ステータスが2ヶ月後なら今回日付 + 2ヶ月
>
以下のクエリでカラム名「次回開催日付」が加わったデータが取得できます。
SELECT
*,
SWITCH(
日付ステータス = '1ヶ月後',DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',DATEADD('m', 2, 今回日付),
true,今回日付
) as 次回開催日付"
FROM [maindata.csv]
次回開催日付でグループ化して、何を取得したいんですか?
[返信 4] Re : SQL文実行時のエラーについて(ADO使用)
投稿者 : おさかな 投稿日時 : 2024/07/11(Thu) 13:32:29
■[返信 3] tkitさん(2024-07-11 12:11:03)の記事
> ■[返信 2] おさかなさん(2024-07-11 10:28:12)の記事
> > 【SQLでやりたいこと】
> > 「日付ステータス」の内容に応じて次回開催日付を設定して、次回開催日付ごとにGROUP BYをかけたい
> > ・日付ステータスが1ヶ月後なら今回日付 + 1ヶ月
> > ・日付ステータスが2ヶ月後なら今回日付 + 2ヶ月
> >
>
> 以下のクエリでカラム名「次回開催日付」が加わったデータが取得できます。
>
> SELECT
> *,
> SWITCH(
> 日付ステータス = '1ヶ月後',DATEADD('m', 1, 今回日付),
> 日付ステータス = '2ヶ月後',DATEADD('m', 2, 今回日付),
> true,今回日付
> ) as 次回開催日付"
> FROM [maindata.csv]
>
> 次回開催日付でグループ化して、何を取得したいんですか?
今回と関係なかったため省略していたのですが、
次回開催日付ごとにそれぞれ何件存在するかCOUNTで取得したいと思っています。
■[返信 3] tkitさん(2024-07-11 12:11:03)の記事
> ■[返信 2] おさかなさん(2024-07-11 10:28:12)の記事
> > 【SQLでやりたいこと】
> > 「日付ステータス」の内容に応じて次回開催日付を設定して、次回開催日付ごとにGROUP BYをかけたい
> > ・日付ステータスが1ヶ月後なら今回日付 + 1ヶ月
> > ・日付ステータスが2ヶ月後なら今回日付 + 2ヶ月
> >
>
> 以下のクエリでカラム名「次回開催日付」が加わったデータが取得できます。
>
> SELECT
> *,
> SWITCH(
> 日付ステータス = '1ヶ月後',DATEADD('m', 1, 今回日付),
> 日付ステータス = '2ヶ月後',DATEADD('m', 2, 今回日付),
> true,今回日付
> ) as 次回開催日付"
> FROM [maindata.csv]
>
> 次回開催日付でグループ化して、何を取得したいんですか?
今回と関係なかったため省略していたのですが、
次回開催日付ごとにそれぞれ何件存在するかCOUNTで取得したいと思っています。
[返信 5] Re : SQL文実行時のエラーについて(ADO使用)
投稿者 : tkit 投稿日時 : 2024/07/11(Thu) 14:34:36
■[返信 4] おさかなさん(2024-07-11 13:32:29)の記事
> > 次回開催日付でグループ化して、何を取得したいんですか?
>
> 今回と関係なかったため省略していたのですが、
> 次回開催日付ごとにそれぞれ何件存在するかCOUNTで取得したいと思っています。
SELECT文の実行順を学んだ方がいいですよ。
以下が分かりやすいかも。
https://qiita.com/k_0120/items/a27ea1fc3b9bddc77fa1
サブクエリで次回開催日付を追加したテーブルとし、
そのテーブルに対し、グループ化⇒SELECT
元々は、存在しないカラム名をグループ化しようとしたから、
構文エラーとなった、です。
SELECT
次回開催日付,
COUNT(次回開催日付) AS カウント
FROM(
SELECT *,
SWITCH(
日付ステータス = '1ヶ月後',DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',DATEADD('m', 2, 今回日付),
TRUE,今回日付
) AS 次回開催日付
FROM
[maindata.csv]
) GROUP BY 次回開催日付
■[返信 4] おさかなさん(2024-07-11 13:32:29)の記事
> > 次回開催日付でグループ化して、何を取得したいんですか?
>
> 今回と関係なかったため省略していたのですが、
> 次回開催日付ごとにそれぞれ何件存在するかCOUNTで取得したいと思っています。
SELECT文の実行順を学んだ方がいいですよ。
以下が分かりやすいかも。
https://qiita.com/k_0120/items/a27ea1fc3b9bddc77fa1
サブクエリで次回開催日付を追加したテーブルとし、
そのテーブルに対し、グループ化⇒SELECT
元々は、存在しないカラム名をグループ化しようとしたから、
構文エラーとなった、です。
SELECT
次回開催日付,
COUNT(次回開催日付) AS カウント
FROM(
SELECT *,
SWITCH(
日付ステータス = '1ヶ月後',DATEADD('m', 1, 今回日付),
日付ステータス = '2ヶ月後',DATEADD('m', 2, 今回日付),
TRUE,今回日付
) AS 次回開催日付
FROM
[maindata.csv]
) GROUP BY 次回開催日付
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-07-03 17:19:25 )