• ベストアンサー

SQL Server2005でWITHキーワードは使えますか?

サブクエリをネストさせたくない(FROM句に書きたくない)ので、Oracleで使っていたWITH キーワードを使いたいのですが、SQL Server2005では使えますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

例えば以下のようなSQLなら、SQL Server 2005でもサポートされています。 with team_costs as ( select team_name,sum(nenpo) team_total from players p,teams t where p.team_id=t.team_id group by team_name), avg_cost as ( select sum(team_total)/count(*) avg from team_costs) select * from team_costs where team_total > (select avg from avg_cost) order by team_name;

real_neo
質問者

お礼

できました。 ありがとうございました。

関連するQ&A

  • WITH句を使用したSQLの結果

    WITH句を使用して総件数と1~20件までのデータを同時に取得するSQLを組んでみたところ、 WITH TMP AS (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO) SELECT T1.ALLCNT, T2.* FROM (SELECT COUNT(*) ALLCNT FROM TMP) T1, TMP T2 WHERE T2.CHECKROWNUM BETWEEN 1 AND 20; Oracle10.2.0.3.0のバージョンで ALLCNTが21になってしまう現象が発生してしまいました。 Oracle10.2.0.4.0や9iでは発生せず正しい総件数が取得できるのですが、 バージョンによる不具合は考えられますでしょうか。 それともSQL自体なにか悪い部分があるのでしょうか。 ちなみに T2.CHECKROWNUM BETWEEN 1 AND 100; と帰るとALLCNTが101と帰ってきます。 また、WITH句を使わず下記のようにTMPの部分をWITH句で使用したSQLに 置き換えると正しくALLCNTが取れます。 SELECT T1.ALLCNT, T2.* FROM (SELECT COUNT(*) ALLCNT FROM (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO)) T1, (SELECT ROW_NUMBER() OVER (ORDER BY NO) AS CHECKROWNUM,NAME FROM TEST_TBL ORDER BY NO) T2 WHERE T2.CHECKROWNUM BETWEEN 1 AND 20;

  • SQL-Serverに対してサブクエリが使えない場合がある。

    現在VB5.0(Win98)でSQL Server7(WinNT)を使用しています。 下記のようなサブクエリを使用してSQLを実行しようとしています。 データコントロールのSQLプロパティに直接記述して実行すると、 うまく結果が得られるのですが、 モジュール内でDAOを使用してODBCデータソースに接続し、下記のSQLを実行すると 「入力テーブルまたは、サブクエリが見つかりません。」のようなエラーとなってしまいます。 データコントロールではサブクエリを使用してSQL Serverから結果を取得できるのに モジュール内でSQLを記述してサブクエリを含むSQLを実行するとエラーになってしまうのは 何故でしょうか? サブクエリをどこかで定義する必要などがあるのでしょうか? select new.K_SEID,new.K_HOKENKB,SUM(new.KINGAKU) from (select K_SEID,K_HOKENKB,K_SURYO * B_KAKAKU as KINGAKU from KONYU,BOOK where K_TAISYO = 1 and K_MSGID = B_MSGID and K_LINE = B_LINE) as new group by new.K_SEID,new.K_HOKENKB

  • SQLサーバーをマスターできればオラクルもすぐにわかりますか?

    SQLサーバーをマスターできればオラクルもすぐにわかりますか? とっつきやすいですか? 要はSQLサーバーとオラクルは似ていますか?

  • SQL-Server 6.5で最初の数行を抽出するには?

    SQL-Server 6.5で最初の数行を抽出するにはどのようにすればよろしいでしょうか? Oracleの場合、 SELECT * FROM TABLE_NAME WHERE ROWNUM <= 10; JETの場合、 SELECT TOP 10 * FROM TABLE_NAME; ですが、これをSQL-Serverで行う場合をご教授下さい。

  • 【再掲】SQL-Serverに対してサブクエリが使えない場合がある。

    現在VB5.0(Win98)でSQL Server7(WinNT)を使用しています。 下記のようなサブクエリを使用してSQLを実行しようとしています。 データコントロールのSQLプロパティに直接記述して実行すると、 うまく結果が得られるのですが、 モジュール内でDAOを使用してODBCデータソースに接続し、下記のSQLを実行すると 「入力テーブルまたは、サブクエリが見つかりません。」のようなエラーとなってしまいます。 データコントロールではサブクエリを使用してSQL Serverから結果を取得できるのに モジュール内でSQLを記述してサブクエリを含むSQLを実行するとエラーになってしまうのは 何故でしょうか? サブクエリをどこかで定義する必要などがあるのでしょうか? なお、接続はDAOです。ADOはVB5.0では使えないような気がします。 RDOでの接続はしていないので、どうなるのかはわかりません。 select new.K_SEID,new.K_HOKENKB,SUM(new.KINGAKU) from (select K_SEID,K_HOKENKB,K_SURYO * B_KAKAKU as KINGAKU from KONYU,BOOK where K_TAISYO = 1 and K_MSGID = B_MSGID and K_LINE = B_LINE) as new group by new.K_SEID,new.K_HOKENKB

  • ORA-14459: GLOBALキーワードがありません。

    ORA-14459: GLOBALキーワードがありません。 以下のSQLを実行したところエラーになりました。 GLOBALキーワードとは何でしょうか?原因を教えてください。 SQL> CREATE TEMPORARY TABLE TEST AS SELECT SYSDATE FROM DUAL; CREATE TEMPORARY TABLE TEST AS SELECT SYSDATE FROM DUAL * 行1でエラーが発生しました。: ORA-14459: GLOBALキーワードがありません。 ORACLE 10g Windows 2008

  • SQL Serverに関する資格

    Oracleならオラクルマスターという認定試験がありますが SQL Serverに関する資格には何がありますか? シスアドでしょうか?

  • PL/SQLでのSQL文法

    こんにちは。教えてください。 PL/SQLを使うのが初めで戸惑っています。 まず、PROCEDUREで =========================== BEGIN SELECT NAME FROM TABLE1 WHERE NAME='tanaka'; END; / =========================== このように書いて実行させようとすると、「コンパイルエラー」 「INTO句はこのSELECT文に入ります」というエラーが出ます。 SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに?? ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて わかりませんでした。 PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。 よろしくお願いいたします。

  • アクセスでfrom句にサブクエリを入れられない?

    本によるとアクセスではSQL文でFROM句にサブクエリを入れられない と書いてありました。それを知らないでFROM句にサブクエリを記述したら うまくできました。保存も無事できました。ところが ほかのクエリを作る際にまったく同じようにしたつもりでFROM句にサブクエリを記述したら、保存の段階で拒絶されてしまいました。不思議です。それから本を調べて、FROM句にはサブクエリを記述できない、と知りました。なぜできたりできなかったりするのでしょうか。ちなみにうまくいったほうのクエリではサブクエリが as [%&&&**]といったものに置き換えがされていました。このあたりの事情がおわかりの方いらっしゃいませんか。ご教示お願いいたします。アクセス2002です。

  • SQL Serverに接続できなくなった。

    はじめまして 現在スタンドアロンのノートPCにSQL Serverと OracleをインストールしたところSQL Serverに アクセスができず(クリエアナライザ使用) 以下の メッセージが表示されました。 ----------------------------------------------- サーバーに接続できません127.0.0.1 サーバーメッセージ17、レベル16、状態1 [Microsoft][ODBC SQL Server Driver] [TCP/IP Sockets]SQL Serverが存在しないか、 アクセスが拒否されました。 ----------------------------------------------- ※ Windows XP SP2 SQL Server 2000 Developer Edition Oracle 9i DataBase(9.0) 調べてみたところ以下のようなページを見つけ書いて ある内容も試してみましたが症状は変わりませんでした。 http://support.microsoft.com/default.aspx?scid=kb;ja;839269 Oracleをインストールする前は問題なく使えていたので OracleとSQL Serverがどこかのポート番号が衝突して いるのでは?と思っているのですが、それ以上の解決方法が探せない状況です。初歩的な質問かもしれませんが、皆様のお力をお借りしたいと思います。 宜しくお願いします。