SQLの書き方について

このQ&Aのポイント
  • SQLの書き方について困っています。科目マスタから科目名を取得する文を追加したいですが、上手く行きません。
  • SQLの書き方に困っています。科目マスタから科目名を取得する文を追加したいですが、エラーが発生しました。
  • SQLの書き方についての質問です。科目マスタから科目名を取得する文を追加したいですが、エラーが発生しています。
回答を見る
  • ベストアンサー

SQLの書き方について

下記のSQL文に科目マスタから科目名を取得する文を追加したいと考えてます。 色々と考えてみたのですが、私のスキルでは上手く行かなくて困っています。 どなたか教えて頂けないでしょう? 宜しくお願いします。 DB:アクセス97・アクセス2000 科目マスタ 科目CD  科目名 SELECT U.商品CD, 商品マスタ.商品名, U.[部署CD], 部署マスタ.部署名, U.SUM受払数 FROM 部署マスタ INNER JOIN ((SELECT 商品CD,受払年月日,部署CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 = '20110510' GROUP BY 商品CD,部署CD,受払年月日,受払数) AS U INNER JOIN 商品マスタ ON U.商品CD = 商品マスタ.商品CD) ON 部署マスタ.部署CD = U.部署CD ORDER BY U.商品CD, U.[部署CD], U.受払年月日, U.[SUM受払数] 科目名を取得する文を追加後のSQL文 SELECT U.商品CD, 商品マスタ.商品名, U.部署CD, 部署マスタ.部署名, U.科目CD, 科目マスタ.科目名, U.SUM受払数 FROM 部署マスタ INNER JOIN ((SELECT 商品CD,受払年月日,部署CD,科目CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 = '20110510' GROUP BY 商品CD,部署CD,受払年月日,科目CD,受払数 ) AS U INNER JOIN 商品マスタ ON U.商品CD = 商品マスタ.商品CD INNER JOIN 科目マスタ ON U.科目CD = 科目マスタ.科目CD ) ON 部署マスタ.部署CD = U.部署CD ORDER BY U.商品CD, U.部署CD, U.受払年月日, U.科目CD, U.SUM受払数 上記のSQLを実行するとエラーになります。 SQL実行中に以下のエラーが発生しました。 エラーコード:-3100 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'U.商品CD = 商品マスタ.商品CD INNER JOIN 科目マスタ ON U.科目CD = 科目マスタ.科目CD' の 構文エラー : 演算子がありません。 SQLステータス:37000 宜しくお願いします。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

SELECT U.商品CD, 商品マスタ.商品名, U.部署CD, 部署マスタ.部署名, U.科目CD, 科目マスタ.科目名, U.SUM受払数 FROM (部署マスタ INNER JOIN ((SELECT 商品CD,受払年月日,部署CD,科目CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 = '20110510' GROUP BY 商品CD,部署CD,受払年月日,科目CD,受払数 ) AS U INNER JOIN 商品マスタ ON U.商品CD = 商品マスタ.商品CD ) ON 部署マスタ.部署CD = U.部署CD ) INNER JOIN 科目マスタ ON U.科目CD = 科目マスタ.科目CD ORDER BY U.商品CD, U.部署CD, U.受払年月日, U.科目CD, U.SUM受払数

tube220701
質問者

お礼

nora1962さん、昨日に続きありがとうございます。 色々直して何回かSQLを実行して見ましたが上手く行かなくて困ってました。 大変助かりました。ありがとうございました。

関連するQ&A

  • SQLのエラーについて

    SQLの初心者です。 アクセス2000で下記のSQLを実行するとエラーになります。 SQLの書き方に問題が有るのでしょうか? どなたか教えて頂けたら幸いです。 宜しくお願いします。 エラーの内容 SQL実行中に以下のエラーが発生しました。 エラーコード:-3100 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'U.商品CD=商品マスタ.商品CD INNER JOIN 部署マスタ ON U.部署CD=部署マスタ.部署CD' の 構文エラー : 演算子がありません。 SQLステータス:37000 SQLの内容 SELECT U.商品CD,商品マスタ.商品名,U.受払年月日,U.部署CD,部署マスタ.部署名, U.SUM受払数 AS 受払数 FROM [SELECT 商品CD,受払年月日,部署CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 = 20110513 GROUP BY 商品CD,部署CD,受払年月日,受払数] AS U INNER JOIN 商品マスタ ON U.商品CD=商品マスタ.商品CD INNER JOIN 部署マスタ ON U.部署CD=部署マスタ.部署CD ORDER BY 商品CD,部署CD,受払年月日,受払数

  • SQL文のエラーについて

    下記のSQL文な実行するとエラーになってしまいます。 数時間考えましたが、上手く行きません。 どなたか教えて頂けないでしょう? 宜しくお願いします。 DB:アクセス97 アクセス2000 SQL実行中に以下のエラーが発生しました。 エラーコード:-3010 [Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください。 SQLステータス:07001 SELECT mid(U.受払年月日,1,6), U.部門CD, 部門マスタ.部門名, U.商品CD, 商品マスタ.商品名, U.科目CD, 科目マスタ.科目名, U.SUM受払数 FROM (部門マスタ INNER JOIN ((SELECT mid(受払年月日,1,6),部門CD,商品CD,科目CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 BETWEEN '201101' and '201105' GROUP BY mid(受払年月日,1,6),部門CD,商品CD,科目CD) AS U INNER JOIN 商品マスタ ON U.商品CD = 商品マスタ.商品CD) ON 部門マスタ.部門CD = U.部門CD ) INNER JOIN 科目マスタ ON U.科目CD = 科目マスタ.科目CD ORDER BY U.受払年月日, U.部門CD, U.商品CD, U.科目CD

  • SQLについて

    いつもお世話になっております。再度、解決できないSQLの問題が発生してしまいました。 識者の方よろしくお願いします。 環境:Oracle10g ストアドプロシージャ (1)参照テーブル  TEMP1(キー:契約番号、連番),TEMP2(キー:連番、契約種類CD),  タイプマスタ(キー:契約種類CD、タイプCD) (2)追加テーブル対象  契約明細(キー:契約番号,タイプCD) 実施したい事は(2)に保存されていない、(1)のデータを (2)に入れたいです。(1)のTEMP1、TEMP2には追加更新対象のデータが保存されています。 タイプマスタの参照はTEMP2にはタイプCDが存在していない為、 TEMP2.契約種類CDからタイプCDを導出しています。 実現出来ていないことなのですが NOT EXISTSの結果が伴わないので INSERTが正しく出来ずに困っております。 INSERT INTO 契約明細 ( 契約番号 ,タイプCD ) SELECT distinct A.契約番号 ,C.タイプCD FROM TEMP1 A INNER JOIN TEMP2 B ON A.連番 = B.連番 INNER JOIN タイプマスタ C ON B.契約種類CD = C.契約種類CD LEFT JOIN 契約明細 D ON C.タイプCD = D.タイプCD WHERE NOT EXISTS( select 'X' FROM TEMP1 INNER JOIN TEMP2 ON TEMP1.連番 =TEMP2.連番 INNER JOIN タイプマスタ ON タイプマスタ.契約種類CD = TEMP2.契約種類CD AND タイプマスタ.契約種類CD = C.契約種類CD INNER JOIN 契約明細 ON 契約明細.タイプCD = タイプマスタ.タイプCD AND 契約明細.タイプCD = D.タイプCD ) ; よろしくお願いいたします。

  • SQLでの集計について

    こんにちわ。以下のようなテーブルから条件に見合う合計を出したいと思いSQLを書いてみたのですが、 思った結果になりません。 テーブルA ID1 得意先Cd 営業所Cd 日付 1  001    001  2005/09/01 2  001    002  2005/09/01 3  001    001  2005/09/03 テーブルB ID2 ID1 部署 数量 金額 1  1  01  1  1000 2  1  01  1  1000 3  1  02  1  1000 4  2  01  1  1000 5  2  01  1  1000 6  3  01  1  1000 7  3  01  1  1000 8  3  02  1  1000 [抽出結果] 得意先Cd 営業所Cd 日付  部署 数量(Sum) 金額(Sum) 001    001  2005/09/01 01   2   2000 001    001  2005/09/01 02   1   1000 001    001  2005/09/03 01   2   2000 001    001  2005/09/03 02   1   1000 001    002  2005/09/01 01   2   2000 [SQL] select 得意先Cd,営業所Cd,日付,部署,SUM(数量) As '数量計',SUM(金額) As '金額計' from テーブルA AA Inner join テーブルB BB ON (AA.ID1 = BB.ID1) group by 得意先Cd,営業所Cd,日付,部署,数量,金額 order by 得意先Cd,営業所Cd,日付,部署 このSQLを実行すると、日付、部署共に同じ場合でも数量・金額が合計値となりません。 得意先Cd 営業所Cd 日付  部署 数量 金額 001    001  2005/09/01 01 1  1000 001    001  2005/09/01 01 1  1000 どのように変更を加えれば、上記の「抽出結果」にできるのでしょうか? よろしくお願いいたします。

  • SQLについて

    以下のSQLを実行すると。 SQL実行中に以下のエラーが発生しました。 エラーコード:907 [Oracle][ODBC][Ora]ORA-00907: 右カッコがありません。 というエラーが表示されます。 どこがおかしいでしょうか? SELECT Q1.Pコード, Q1.Qコード, T1.E名称 A名称, T2.E名称 B名称, T3.E名称 C名称, T4.E名称 D名称, FROM ( ( ( ( SELECT Pコード, Qコード, Aコード, Bコード, Cコード, Dコード, FROM 報告書 WHERE Pコード = '0001' AND Qコード = '0001' AND ) Q1 INNER JOIN Eマスタ T1 ON Q1.Aコード = T1.Eコード ) INNER JOIN Eマスタ T2 ON Q1.Bコード = T2.Eコード ) INNER JOIN Eマスタ T3 ON Q1.Cコード = T3.Eコード ) INNER JOIN Eマスタ T4 ON Q1.Dコード = T4.Eコード ORDER BY Pコード, Qコード;

  • Access2007 の SQL文です。

    宜しくお願いします。 DoCmd.RunSQL ("update 予算月別 inner join 予算実績 on 予算月別.科目ID=予算実績.科目ID " _ & " set 合計金額 =sum(当年予算) where (月度>=開始日) and (月度<=終了日) group by 科目ID; ") これで 実行時エラー '3137': SQL ステートメントの最後には、セミコロン(;)が必要です。 下記のSQL文は実行できました。 これを編集したものです。 DoCmd.RunSQL ("update 予算月別 inner join 予算実績 on 予算月別.科目ID=予算実績.科目ID " _ & " set 金額01 =当年予算 where 月度=開始日 ; ")

  • sqlについて

    下に書いたsqlのコードの内容(どういう処理でどういう結果になるのか)が知りたいです。 どなたかわかる方教えてください。 select b.ym, b.no,     isnull(e.sumcnt,0)as val, null as bunsi, null as bunbo from (select distinct ym,no from Table_A)b inner join (select ym from Table_B where cd=1)d on b.ym=d.ym left outer join (select b1.ym,b1.no,sum(c1.cnt)as sumcnt from Table_A b1 inner join (select ym from Table_B where cd=1)d1 on b1.ym=d1.ym inner join Table_C c1 on b1.ym=c1.ym group by b1.ym,b1no)e on b.ym=e.ym and b.no=e.no

  • JOINのネスト制限?

    基本的な問題かもしれませんが、SQLのJOINの使い方が判らないので教えて下さい。 SQLで A表とB表とC表をINNER JOINした表に対して、 D表をOUTER JOINした結果に対して、E表をINNER JOINしたいのですが、 SQL文で書くことは可能でしょうか? SELECT ((((cols FROM A INNER JOIN B ON --) INNER JOIN C ON --) OUTER JOIN D ON --) INNER JOIN E ON --) と単純に書くとネスト数のオーバーなのかエラーが出ます。 後ろの部分だとサブクエリーに対してJOINすればよいかもしれませんが、主ファイルに当る部分の場合はサブクエリーに切り出す方法が判りません。 よろしくお願いします。

  • 以下のようなSQLについて教えてください。

    売上トランと商品マスタがあるとします。 商品マスタは廃止フラグをVARCHAR2(1)で保持していて、 1なら廃止、0なら今販売中で、 商品マスタは全件で100万件あり、そのうち95万件は既に廃止になっているとします。 このとき、 SELECT 売上トラン.* , 商品マスタ.商品名称 FROM 売上トラン INNER JOIN 商品マスタ ON 売上トラン.商品コード = 商品マスタ.商品名称 WHERE 商品マスタ.削除フラグ = '0' と書くのと、 SELECT 売上トラン.* , 商品マスタ.商品名称 FROM 売上トラン INNER JOIN (SELECT * FROM 商品マスタ WHERE 商品マスタ.削除フラグ = '0') 商品マスタ ON 売上トラン.商品コード = 商品マスタ.商品名称 と書くのだと、検索は下の方が速くなったりしますか? イメージですが、 上だと全件同士でくっつけた後で削るのに対して、 下だと削って5万件だけになったものをっつけていて、下の書き方の方が良いのかな? と思ったものの、どこかの本などでこういう書き方が良いと読んだわけではないので、 イメージであっているのか、それとも変わらないのか質問しました。 また、削除フラグのように1か0の2値しかとらない項目については、 INDEXを張る効果はあるでしょうか? ちなみにverで挙動が変わるかわかりませんが、環境はoracle11gを想定した場合となります。

  • sql2005 UPDATEの質問なのですが、先日jamshid6さん

    sql2005 UPDATEの質問なのですが、先日jamshid6さんに 顧客毎の累計金額を顧客マスタへupdateの方法を教えて もらったのですが、期間の日付がnullの場合が発生すること があり、nullの場合は、全データ対象となる書き方を教えて 下さい。 (1) update 顧客マスタ set 累計金額=B.累計金額 from 顧客マスタ as A inner join (select 顧客コード,sum(売上金額) as 累計金額 from 売上データ where 売上日付 between '2010/03/01' and '2010/06/30' group by 顧客コード) as B on A.顧客コード=B.顧客コード (2) あと、顧客マスタには、生年月日があり、本日日付より年齢を求めて 顧客マスタの年齢にupdateすることは可能ですか? これも、生年月日がnullの時もあるので、その場合は、年齢を0にした いと思います。 顧客マスタ...顧客コード、生年月日(datetime)、年齢(int) 宜しくお願いします。