- ベストアンサー
WITH句を使用して複数のテーブルを定義する方法
- WITH句を使用して複数のテーブルを定義する方法を知りたいです。エラーメッセージが表示される問題についても解決策を教えてください。
- この記事では、WITH句を使用して複数のテーブルを定義する方法について詳しく説明します。また、エラーメッセージの表示に関する問題についても解決策をご紹介します。
- 複数のテーブルを定義するためには、WITH句を使用する方法があります。ただし、エラーメッセージが表示される場合もありますので、その解決策についてもご紹介します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>#1さんの指摘では、ttrがスコープ外?だったから >いけなかったのでしょうか。 迷走してませんかね? >b (ttr.documentcode, cnt) as ( CTEで「表名を b 、列名を ttr.documentcode と定義する」という指定になっていますよ? もし、仮にそういった列名を使いたいなら、標準SQLでは " (二重引用符)、SQL Serverなどは [ ] で囲みますよね?
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1さんの指摘部分”だけ”、修正したのですか? >WITH a (code, cnt) as ( > select code, count(*) from abc > where a is null > group by documentcode), abc表に、code列はあるのですか? 仮にあっても、documentcodeでグループ化しているのだから、おかしいですよね? >b (ttr.documentcode, cnt) as ( ↓ b (documentcode, cnt) as ( としたのでしょうかね? >select ttr.documentcode, count(*) from abc tr inner join def ttr >with(nolock) >on tr.seqno = ttr.seqno >where SendTime is null >group by documentcode ) グループ化するdocumentcode列は、trとttrのどちらのを使えばいいか曖昧ですよね? select句でttr.documentcodeを指定するなら、 group by ttr.documentcode と指定することになりますよね?
お礼
おおお、、、、そうですね。。。 今回WITH句をはじめてつかったので、 そのせいだとばかり思っていました。 >>WITH a (code, cnt) as ( >> select code, count(*) from abc >> where a is null >> group by documentcode), >abc表に、code列はあるのですか? >仮にあっても、documentcodeでグループ化しているのだから、おかし >いですよね? 上記については、 select documentcode, count(*) from abc where a is null group by documentcode の間違いでした。すみません。 そのままコピペする訳にはいかず、多少クエリを 編集したのですが、その際にミスしました。 #1さんの指摘では、ttrがスコープ外?だったから いけなかったのでしょうか。 また、、、そうですね。group by後のdocumentcodeに ttr.をつけてませんでした。 指摘頂いた通り修正後、実行される事が確認できました。 ありがとうございます。
- jamshid6
- ベストアンサー率88% (591/669)
> b (ttr.documentcode, cnt) おかしいのはここです。 => b (documentcode, cnt)
補足
教えて頂いた通りにSQLを再発行しました。 その際、以下のエラーメッセージが発生しました。 列名'code'が無効です。 列名'documentcode'があいまいです。
お礼
回答ありがとうございます。 ごちゃごちゃしていましたが、今、整理できました。 表b (表bの列定義) as ( 表bとなるクエリ ) なので、bの列定義となる列名はなんでもよく、 ただ、私の場合、ttr.documentcodeとなっていたので その定義の仕方は、よくないでしょ、ってことで エラーとなっていたんですね。