• 締切済み

MSDEのSQLについて

DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

noname#2829
noname#2829

みんなの回答

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

MSDEであればストアドプロシージャを使えば 出来るのではないでしょうか? 以下の2つのサブクエリ (SELECT AVG([フィールド1]) FROM テーブル1) (SELECT AVG([フィールド1]) FROM テーブル1) を別変数にとっておけば出来るのでは ないでしょうか?

関連するQ&A

  • SQL文で、1,2,3、以外(0とかブランク)を1と見立てて集計したい

    データを取り出す時次のように書きます SELECT テーブル1.id, テーブル1.kubun FROM テーブル1; このフィールドkubun、は本来、1、か、2、ですが 例外的にブランクや0(ゼロ)が入っています。 フィールドkubun、がブランクやゼロだったら、1に変換 しながら、テーブル1から集計するSQL文はないでしょうか? テーブル1を前もって変換しておけが、いいのですが そうした方法を使わず、集計の時に行いたいのですが

  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?

  • SQLの書き方を教えて!

    select name,SUM(kingak) from where date between 150221 and 150320 group by frjpc.trcd のようにSUMで集計を行うSQLを発行する時に,同時にkingak順にsortすることは可能なのでしょうか? select name,SUM(kingak) from where date between 150221 and 150320 group by frjpc.trcd order by SUM(kingak) としたいところですが,これではエラーになりますね。 SQLでは解決できないんでしょうか?

  • ユニオンクエリで期間指定抽出のSQL記述について

    いつもお世話になっております。 Access 2007で、「人名集計」テーブルと「資料送付」テーブルがあり、それぞれ、同一のフィールド名でテーブルが作成されております。 これを「発送日」フィールドの昇順で並べ替えながら結合するユニオンクエリを作成しました。 SELECT * FROM 人名集計 UNION ALL SELECT * FROM 資料送付 ORDER BY 発送日; とりあえず、上記のSQLでは動いていますが、このSQLに、 「発送日」の期間を指定して、抽出条件(パラメータ)を加えようとしていますが、うまくいきません。 WHERE句を使って、Between 「最初の日付を入力」 And 「最後の日付を入力」 のような文を SQLの何処にどのように記述すればよいのか、教えてください。 宜しくお願い申し上げます。

  • 集計のSQLについて

    皆さんの知恵をお借りしたいと思っています。 どなたか、良い案がある方お願いいたします。 以下のテーブルがあります。 (売上テーブル) 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   40    Bさん 鉛筆   30    Bさん 鉛筆   30        鉛筆   10        上のテーブルで、品名・購入者を集計キーとして、 金額を集計したい場合、 SELECT 品名,購入者,SUM(金額) FROM 売上テーブル GROUP BY 品名,購入者  というSQL文で,   品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   40        という結果が得られると思いますが・・・、 これを、 品名   金額   購入者 ---------------------------- 鉛筆   20    Aさん 鉛筆   70    Bさん 鉛筆   30        鉛筆   10        という結果になるようなSQL文を作りたいのです。 購入者が入っているものについては、品名・購入者で集計して、 購入者が空欄のものは集計しないようにしたいと思っています。 UNIONを使えばできるとは思うのですが、 それ以外の方法で、1回のSQL文でできる方法があれば知りたいと思っています。 よろしくお願いします。

  • SQLの[ ] は?

    ひとつどうしても気になる事があります。 Access97でSQL文を作ってるのですが、どうしても[]が 付くんです。 例えば 1:"SELECT [BACKUP-2].住所1 FROM [BACKUP-2]" って感じです。 別のテーブルは 2:"SELECT BACKUP-1.住所1 FROM BACKUP-1" で動きます。 これって何が違うのでしょうか?1は[ ]をとると 構文エラーとなって動いてくれません。 どうしても気になってしかたないのですが。 理由を教えてください。

  • データベースのワイルドカードは%ではないの?

    アクセスのテーブルに あ い う があり、 SQL文で *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "%あ%")); *********************************************** としてもエラーにならないけど、「あ」が抽出されません。 *********************************************** SELECT テーブル1.フィールド FROM テーブル1 WHERE (((テーブル1.フィールド) Like "*あ*")); *********************************************** にすると、「あ」が抽出されます。 アクセスなどのデータベースのワイルドカードは%だと思っていたのですが違うのですか?

  • SQL文の作り方、SUM関数を2回使いたいです。

    こんばんわ、SQL分の勉強をしています。以下のSQL文を見てください。 select sum(dat1) from daityou,book (SELECT book.author,book.bookname,book.money*daityou.cnt AS dat1 FROM book, daityou where book.bookname=daityou.bookname); 内容は、著者と本のタイトルと本ごとの売り上げの一覧表を作成し、さらに著者毎に売り上げを集計したいのですが、エラーになります。 どのような文を作成すればいいのでしょうか? SUM関数を2回使わなくてもいいです。 よろしくお願いします。

  • SQLのエイリアス

    select 1000 - sum(縦 * 横 * 高さ * table1.個数 * 10) As SIZE1, 2000 - sum(縦 * 横 * 高さ * table1.個数 * 10) As SIZE2, 3000 - sum(縦 * 横 * 高さ * table1.個数 * 10) As SIZE3 from table1 といったようなSQL文があったとします。 ○ - sum(縦 * 横 * 高さ * table1.個数 * 10)の中の、 sum(縦 * 横 * 高さ * table1.個数 * 10)は共通です。 この部分を共通化させる方法はあるのでしょうか? 例えばイメージとして、 string X = "sum(縦 * 横 * 高さ * table1.個数 * 10)" 1000 - X とやれば見やすいです。 SQLで上記のような方法が使えないのはわかるのですが、何か上手なやり方はあるでしょうか? 環境はMYSQL5.5 Win 7です。

    • ベストアンサー
    • MySQL
  • 複数から成るテーブルを元に特定の月を集計するSQL

    MAINテーブルとITEMテーブルの2つがあります。両方のテーブルともIDが主キーです。 MAINテーブル Field #01: Alias:ID Type:INTEGER Field #02: Alias:CDATE Type:TIMESTAMP ※他にもいくつかフィールドが存在するが割愛 ITEMテーブル Field #01: Alias:ID Type:INTEGER Field #02: Alias:ITEM Type:STRING(20) Field #03: Alias:INCOME Type:NUMERIC(18,4) Field #04: Alias:OUTGO Type:NUMERIC(18,4) Field #05: Alias:REFID Type:INTEGER ここから、特定の年月を持つMAIN.CDATEのMAIN.ID(複数個存在する場合あり)とITEM.REFIDが一致するデータより、ITEM.INCOMEの総計からITEM.OUTGOの総計を差し引いた値を取得するSQL文を1回のクエリーで実装したいと考えています。 文章ではなかなか説明しづらいのですが、下記のようなSQL文をイメージしています。もちろんこれは正しい結果を返しませんので、どのようにSQL文を記述すれば正しい結果を得られるかの知恵をお貸しください。 /* 2010年1月の収支 */ select SUM(income) - SUM(outgo) from item where id = (select id from main where extract(year from cdate) = 2010 AND extract(month from cdate) = 1);