プロが教えるわが家の防犯対策術!

見積のシステムを作る際、AccessからSQL Serverに接続をするためパススルークエリーにて実行させようとしたのですが、エラーが発生してしまいます。

SQLビューのコード
SELECT 見積明細備考.見積明細備考ID, 見積明細.見積明細ID, 見積明細.見積ID, 見積明細備考.型番, IIf((IsNull((SELECT Sum(Q_加工費.価格) FROM Q_加工費 WHERE 見積明細ID=見積明細.見積明細ID and 型番=見積明細備考.型番))),0,(SELECT Sum(Q_加工費.価格) FROM Q_加工費 WHERE 見積明細ID=見積明細.見積明細ID and 型番=見積明細備考.型番)) AS 加工費
FROM 商品 INNER JOIN ((見積明細 INNER JOIN 取引先 ON 見積明細.得意先ID = 取引先.得意先ID) INNER JOIN 見積明細備考 ON 見積明細.見積明細ID = 見積明細備考.見積明細ID) ON 商品.型番 = 見積明細備考.型番
GROUP BY 見積明細備考.見積明細備考ID, 見積明細.見積明細ID, 見積明細.見積ID, 見積明細備考.型番;


エラー内容
ODBC-- 呼び出しが失敗しました。
[Microsoft][ODBC SQL Server Driver][SQL server]isnullには引数が2個必要(#174)。[Microsoft][ODBC SQL Server Driver][SQL server]')'付近に不適切な構文があります。(#102)


IIfとIsNullを使い別クエリにある加工費の合計を計算し、見積明細備考というテーブルにある見積明細備考にあるID1つにつき加工費の集計結果を出力するレコードがありそれが原因だと思うのですが、どのように変更すればエラーがなくなるでしょうか?
長文になりましたが、ご助力願えればと思います。
宜しくお願い致します。

補足
見積(主キー 見積ID)ー見積明細(主キー 見積明細ID)ー見積明細備考(主キー 見積明細備考ID)

加工費(主キー 加工費ID)
材料費(主キー 材料費ID)
初回費用(主キー 初回費用ID)
運賃(主キー 運賃ID)
各テーブルに見積ID、見積明細IDがある
見積明細ID、見積明細備考にある型番から該当の費用を参照し合計を総合計クエリに表示させている

取引先(主キー 得意先ID)
商品(主キー 型番)
主キーを参照することで得意先名と商品名を表示させるようにしている

データベースツールの「データベースの最適化」とデータベースツールの「パフォーマンスの最適化」では特に変化はありませんでした。

質問者からの補足コメント

  • ご回答ありがとうございます。
    isnull→is nullにしたところ別エラーが発生しました。

    ODBC-- 呼び出しが失敗しました。
    [Microsoft][ODBC SQL Server Driver][SQL server]キーワード'Is'付近に不適切な構文があります(#156)。[Microsoft][ODBC SQL Server Driver][SQL server]')'付近に不適切な構文があります。(#102)。[Microsoft][ODBC SQL Server Driver][SQL server]')'付近に不適切な構文があります。(#102)

    申し訳ございませんがこちらのエラーについて何かわかるでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2024/02/16 14:49
  • osamuy様
    ご回答ありがとうございます。

    以下のように変更したところ別のエラーが発生しました。

    IsNull(SELECT Sum(Q_加工費.価格) FROM Q_加工費 WHERE 見積明細ID=見積明細.見積明細ID and 型番=見積明細備考.型番,0) AS 加工費

    エラー内容
    [Microsoft][ODBC SQL Server Driver][SQL server]SELECT付近に不適切な構文があります。(#156)。[Microsoft][ODBC SQL Server Driver][SQL server]')'付近に不適切な構文があります。(#102)

    こちらのエラーについて何かわかるでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2024/02/19 09:25

A 回答 (2件)

null値検索をしたいのであれば、isnull の間にスペースを入れたら(is null)どうだろう?


https://learn.microsoft.com/ja-jp/sql/t-sql/func …
この回答への補足あり
    • good
    • 0
この回答へのお礼

こちらの回答を参考に実行することができましたのでベストアンサーにさせていただきます。
ご回答ありがとうございました。

お礼日時:2024/02/22 15:51

ISNULL (Transact-SQL):

https://learn.microsoft.com/ja-jp/sql/t-sql/func …
IsNull 関数: https://support.microsoft.com/ja-jp/office/isnul …

上記違いがあるので、SQL Server用に書き換える必要があるかと。
IIf((IsNull(※S※)),0,(※S※)) → ISNULL(※S※,0)
この回答への補足あり
    • good
    • 0
この回答へのお礼

SQL Server用に書き換える必要があることがわかり文の修正をすることができました。
ご回答ありがとうございました。

お礼日時:2024/02/22 15:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A