• 締切済み

Access2000のSQL文の質問です。

Access2000のSQL文の質問です。(長文) [OYA]テーブルに、OYA_CODE(KEY),OYA_NAMEのフィールドがあります。   データは、1 , A 2 , B です。 [KO]テーブルに、KO_CODE(KEY),KO_NAMEのフィールドがあります。   データは、11 , A-1 12 , A-2 13 , A-3 21 , B-1 22 , B-2 です。 [TENKAI]テーブルに、OYA_CODE(KEY),KO_CODE(KEY),CNTのフィールドがあります。   データは、1 , 11 , 1 1 , 12 , 2 2 , 21 , 3 2 , 22 , 4 です。 [DATA]テーブルに、OYA_CODE(KEY),KO_CODE(KEY),CNTのフィールドがあります。   データは、1 , 11 , 10 1 , 12 , 20 2 , 21 , 100 2 , 22 , 200 です。 結果を OYA_CODE, OYA_NAME, KO_CODE, KO_NAME, KEI 1, A, 10 1, A, 11, A-1, 10 1, A, 12, A-2, 40 2, B, 100 2, B, 21, B-1, 300 2, B, 22, B-2, 800 と、したいのです。 つまり、[TENKAI]のCNT×[DATA]のCNT が、ほしいのです。 ネックは、OYA_CODEのみのレコードが出ないのです。 このテーブルにこう言うフィールドをつける等、 具体的にご支持を頂ければ幸いです。 宜しくお願い致します。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

サブクエリを使うのかな・・・ Access2003では下記SQLで可能です。 SELECT E.OYA_CODE,F.OYA_NAME,E.KO_CODE,G.KO_NAME,E.KEI FROM ((SELECT C.OYA_CODE,C.KO_CODE,C.CNT*D.CNT AS KEI FROM DATA AS C INNER JOIN TENKAI AS D ON C.OYA_CODE=D.OYA_CODE AND C.KO_CODE=D.KO_CODE UNION SELECT A.OYA_CODE,NULL AS KO_CODE,A.CNT AS KEI FROM DATA AS A INNER JOIN (SELECT X.OYA_CODE,MIN(X.KO_CODE) AS KO_CODE FROM DATA AS X GROUP BY X.OYA_CODE) AS B ON A.OYA_CODE=B.OYA_CODE AND A.KO_CODE=B.KO_CODE) AS E LEFT JOIN OYA AS F ON E.OYA_CODE=F.OYA_CODE) LEFT JOIN KO AS G ON E.KO_CODE=G.KO_CODE 何やってるか分からないですね。 (1)DATAテーブルからOYA_CODEと、OYA_CODEでグループ化した時の  最小値のサブクエリを作ります。 (2)DATAテーブルと(1)のサブクエリをINNER JOINし、CNTと共に  KO_CODEをNULLとした(KO_CODEとKO_NAMEを空欄にするため)  クエリ(「OYA_CODEのみのレコード」)を作っています。 (3)DATAテーブルとTENKAIテーブルをOYA_KEYとKO_KEYでINNER JOINし、  DATA.CNT * TENKAI.CNT をKEIとするクエリを作っています。 (4)上記(2)と(3)を合成(UNION)したものと、OYA、KOをそれぞれ  LEFT JOIN してOYA_NAMEとKO_NAMEを持ってきています。 分かりにくい場合は各"SELECT"の所を別クエリにして結合しても同じ 結果が得られます。「OYA_CODEのみのレコード」は「1,A,10」には ならず、「1,A,,,10」になります。まあ、これは当然ですね。

m-toshi
質問者

お礼

早速のご回答をありとがとうございます。 テスト環境では、ACCESS97の為だと思いますが、 「FORM句の構文エラー」と、なってしまいます。 明日、改めて結果をご報告できるかと思います。 宜しくお願い致します。

関連するQ&A

  • Oracle[10g]のSQL文について(改めて)

    すみません。[B]テーブルの作成がおかしい様でしたので、 改めて質問させて下さい。 Oracle[10g]のSQL文についての質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE3](KEY) [NAMEB] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 X 2 A-3 Y 1 A-2 結果が [NO/LINE/CODE/NAMEB] X 1 A-1 NAME-B-1 X 2 A-3 (NULL) と、なる様にしたいのです。 SELECT C1.NO, C1.LINE,C1.CODE, Tx.NAMEB FROM C1 , ( SELECT C1.CODE, TNMx1.NAMEB FROM C1, ( SELECT CODE, CODE2, CODE3, NAMEB FROM A, B WHERE A.CODE2 = B.CODE3 ) TNMx1 WHERE C1.NO = 'X' AND C1.CODE = TNMx1.CODE(+) ) Tx WHERE C1.NO = 'X' GROUP BY C1.NO, C1.LINE,C1.CODE, Tx.NAMEB と、考えたのですが、何故か結果が X 1 A-1 (NULL) X 1 A-1 NAME-B-1 X 2 A-3 (NULL) X 2 A-3 NAME-B-1 4行もでてしまいます。 問題は、[B]テーブルです。 宜しくお願い致します。

  • Oracle[10g]のSQL文について

    ごぶさたしております。Oracle[10g]のSQL文についての 質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE2](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 B-3 NAME-B-3 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 Y 1 A-2 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 Y 1 1 BIKO-3 結果が [NO/LINE/LIN2/NAME-B/BIKO] X 1 1 NAME-B-1 BIKO-1 X 1 2 NAME-B-1 BIKO-2 Y 1 1 NAME-B-2 BIKO-3 と、なる様にしたいのです。問題は、[B]テーブルです。 今まで、教えていただいた事を参考に頑張ってみましたが、 思う結果がでません。宜しくお願い致します。

  • Oracl[10g]の SQL文について(No.6)

    何度も恐縮です。前回の質問(例題)が間違えていました。 本当に申し訳ございません。改めて、お願いしたい次第です。 Oracl[10g]の SQL文について、教えて下さい。 [C1]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE](key) と [NOUKI](key) と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [C2]テーブルに [CODE2](key) と [NAME2] と [CODE] フィールドがあるとします。 内容は、 AAA NAME2-1 A-1 BBB NAME2-2 A-2 CCC NAME2-3 A-3 と、します。 [C3]テーブルに [CODE2](key) と [NO](key) と [KIN2] フィールドがあるとします。 内容は、 AAA 1 200 AAA 2 300 BBB 1 10 BBB 2 20 BBB 3 30 と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 500[C3]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 60[C3]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? 前回、教えて頂いた例を参考に頑張っているのですが、 まだ、私には難しすぎる様です。 よろしくお願い致します。

  • Oracl[10g]の SQL文について(No5)

    何度も恐縮です。また、違った事が出てきました。(^^; Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 AAA A-2 2005/01/01 300 AAA A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 [B2]テーブルに [CODE2] と [NO] と [KIN2] フィールドがあるとします。 内容は、 AAA 1 1000 AAA 2 2000 DDD 1 3000と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 3000[B2]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 3000[B2]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィールドを[B2]テーブルに反映させたいのです。 SELECT A.CODE,A.NAME,SUM(B.KIN),SUM(B2.KIN2) FROM A, B, B2 WHERE A.CODE=B.CODE AND B.CODE2=B2.CODE2 GROUP BY A.CODE,A.NAME ORDER BY A.CODE と、すれば、何故か A-1 NAME-1 600 6000 A-2 NAME-2 1000 6000 と、言う結果がでます。 これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。

  • Oracle[10g]のSQL文について。(新No.3)

    なんども、恐縮です。 Oracle[10g]のSQL文についての質問です。(新No.3) 実は、JOINが多くてどこに[ROW_NUMBER]を入れれば良いのか解りません。 [A]テーブルに [CODE](KEY) [CODE2] のフィールドがあります。 A-1 B-1 A-2 B-2 A-3 B-3 [A2]テーブルに [CODEB](KEY) [CODE2] のフィールドがあります。 AA-1 B-1 AA-2 B-2 AA-3 B-3 [B]テーブルに [CODE3](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] [CODEB]のフィールドがあります。 X 1 A-1 AA-2 X 2 A-3 AA-1 Y 1 A-2 AA-3 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 結果が [NO/LINE/CODE/CODEB/NM1/NM2/BIKO] X 1 A-1 AA-2 NAME-B-1 NAME-B-2 BIKO-1 X 2 A-3 AA-1 (null) NAME-B-1 (null) と、なる様にしたいのです。 要するに、のBIKOは、[C2.LINE2]の一番最小の物を取得したいのです。 SELECT C1.NO, C1.LINE, C1.CODE, C1.CODEB, B.NAMEB AS NM1, B_1.NAMEB AS NM2, C2.LINE2, C2.BIKO FROM ((((C1 LEFT JOIN A ON C1.CODE = A.CODE) LEFT JOIN B ON A.CODE2 = B.CODE3) LEFT JOIN A2 ON C1.CODEB = A2.CODEB) LEFT JOIN B B_1 ON A2.CODE2 = B_1.CODE3) LEFT JOIN C2 ON (C1.LINE = C2.LINE) AND (C1.NO = C2.NO) WHERE (((C1.NO)='X')) ORDER BY C1.NO, C1.LINE, C2.LINE2; と、考えたのですが、結果が X 1 A-1 AA-2 NAME-B-1 NAME-B-2 1 BIKO-1 X 1 A-1 AA-2 NAME-B-1 NAME-B-2 2 BIKO-2 X 2 A-3 AA-1 (null) NAME-B-1(null)(null) と、出てしまいます。 どうすれば良いのでしょうか ? 宜しくお願い致します。

  • OraclのSQL文について(No3)

    何度も恐縮です。また、違った事が出てきました。(^^; Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 BBB A-2 2005/01/01 300 CCC A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 結果が、 A-1 NAME-1 300 AAA A-2 NAME-2 1200 CCC と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィードは一番最初を表示させたいのです。 SELECT A.CODE, A.NAME, B.CODE2, SUM(B.KIN) FROM A, B WHERE A.CODE = B.CODE GROUP BY A.CODE, A.NAME,B.CODE2 ORDER BY A.CODE と、すれば A-1 NAME-1 AAA 100 A-1 NAME-1 BBB 200 A-2 NAME-2 CCC 300 A-2 NAME-2 DDD 400 A-2 NAME-2 EEE 500 と、言う結果がでます。(当然ですが) これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。

  • Access97のクエリー(sql文)について

    [A]テーブルに[CODE.DATE.CHK]とフィールドがあります 内容は、 [CODE][DATE][CHK] 01.2007/06/01.0 01.2007/06/10.1 01.2007/06/11.1 02.2007/05/01.0 02.2007/05/10.1 と、します。 結果を 01.3.2 02.2.1  と、したいのです。 つまり、[DATE]の行数と、[CHK]が1の件数が とりたいのです。 SELECT A.CODE, Count(A.DATE) AS CNT FROM A GROUP BY A.CODE; と、すれば、[DATE]の行数はとれます。 [CHK]が1の件数の取り方が解りません。 宜しくお願い致します。

  • Oracle10gのSQL文についての質問です。

    Oracle10gのSQL文についての質問です。 [A]テーブルに CODE(key) NAME と、フィールドがあります。 A NAME-A B NAME-B C NAME-C D NAME-D E NAME-E と、データが入っています。 [B]テーブルに CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 A 3 BIKO-A-3 B 1 B 2 B 3 C 1 C 2 BIKO-B-2 C 3 D 1 BIKO-D-1 D 2 BIKO-D-2 D 3 BIKO-D-3 E 1 E 2 E 3 BIKO-E-3 と、データが入っています。 結果が CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 BIKO-A-1 A 3 BIKO-A-1 B 1 (null) B 2 (null) B 3 (null) C 1 BIKO-B-2 C 2 BIKO-B-2 C 3 BIKO-B-2 D 1 BIKO-D-1 D 2 BIKO-D-1 D 3 BIKO-D-1 E 1 BIKO-E-3 E 2 BIKO-E-3 E 3 BIKO-E-3 と、したいのです。 つまり、[B]テーブルのLINEが一番小さいBIKOが欲しいのです。 色々と考えてみましたが、解りません。 宜しくお願い致します。

  • Oracl[10g]の SQL文について(No.7)

    何度も本当に恐縮です。自力で頑張ろうと思いましたが無理でした。(;_;) Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [A2]テーブルに [NO](key) と [CODE1] と [KIN1] と [CODE2] と [KIN2] フィールドがあるとします。内容は、 1 A-1 100 (null null) 2 A-1 10 A-3 300 3 A-2 20 A-1 10 4 A-3 5000 A-1 20 と、します。 5 A-3 500 結果が、 A-1 NAME-1 110[A2]テーブル[KIN1]の合計 30[A2]テーブル[KIN2]の合計 A-2 NAME-2 20[A2]テーブル[KIN1]の合計 0(null) A-3 NAME-3 5500[A2]テーブル[KIN1]の合計 300 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? SELECT A.CODE, A.NAME, SUM(A2.KIN1) AS KIN1, SUM(A2.KIN2) AS KIN2 FROM A,A2 WHERE A2.CODE1=A.CODE OR A2.CODE2=A.CODE GROUP BY A.CODE, A.NAME と、すると何故か A-1 NAME-1 5130 330 A-2 NAME-2 20 10 A-3 NAME-3 5510 320 と、言う結果になってしまいます。 よろしくお願い致します。

  • Oracl の SQL文について

    Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [DATE] と [MONEY] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [DATE]の条件を、2005/01/01~2005/01/31とし、結果を A-1 NAME-1 300 A-2 NAME-2 700 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? よろしくお願い致します。