• 締切済み

レコード集計のSQLについて

お世話になります。 SQL Serverに関する質問です。 以下の内容を満たすSQLを作成したいのですが、 方法がわからず困っています。 (内容) *************************************************************** ・Aテーブル、Bテーブルには、以下のレコードが格納されています。 [Aテーブル] | key_code | code1 | code2 | code3 | money | person | ← カラム名 ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- | 001 | 1 | 2 | 1 | 3000 | 10 | ---------------------------------------------- | 001 | 1 | 1 | 1 | 1000 | 10 | ---------------------------------------------- [Bテーブル] | key_code | cd1 | cd2 | cd3 | cd4 | cd5 | ・・・・・ | cd10 | ← カラム名 ------------------------------------------------------------ | 001 | 01 | 02 | 10 | 30 | 51 | ・・・・・ | 90 | ------------------------------------------------------------ | 002 | 01 | 02 | 03 | 10 | 40 | ・・・・・ | 55 | ------------------------------------------------------------ ・Aテーブルの key_code とBテーブルの key_code を関連付けて、  Bテーブルのcd1~cd10に格納されている各コード単位に集計した  Aテーブルのmoney及びpersonの値を取得したい。  例えば、 key_code = '000' でAテーブルとBテーブルを関連付けして、 Bテーブルのcd(1~10) = '10' で集計した Aテーブルの money と personの 値を求めたい。 **************************************************************** 初歩的な質問で申し訳ございませんが、 どなたかご教授願えませんでしょうか? よろしくお願いいたします。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

select cd,sum(money),sum(persion) from ( select b.cd1 cd,sum(a.money) money, sum(a.person) person from Aテーブル a,Bテーブル b where a.key_code = b.key_code group by b.cd1 union select b.cd2 cd,sum(a.money) money, sum(a.person) person from Aテーブル a,Bテーブル b where a.key_code = b.key_code group by b.cd2 union select b.cd3 cd,sum(a.money) money, sum(a.person) person from Aテーブル a,Bテーブル b where a.key_code = b.key_code group by b.cd3 ・・・ select b.cd10 cd,sum(a.money) money, sum(a.person) person from Aテーブル a,Bテーブル b where a.key_code = b.key_code group by b.cd10 ) group by cd,order by cd [結果] | cd | money | person | ---------------------------------------------- | 01 | 5000 | 30 | ---------------------------------------------- | 02 | 5000 | 30 | ---------------------------------------------- | 10 | 5000 | 30 | ---------------------------------------------- | 30 | 5000 | 30 | ---------------------------------------------- | 51 | 5000 | 30 | ---------------------------------------------- ・・・ ---------------------------------------------- | 90 | 5000 | 30 | ---------------------------------------------- と出したいということかな? (違う気がしますが。) ・・・違うなら、サンプルの訂正([Aテーブル]のkey_codeに002も入れましょう。)と、 結果を明示してください。 [Aテーブル]のcode1,code2,code3が絡むのかもしれませんが、 今の提示では、1か2なので、[Bテーブル]と結合結果は「なし」。 また、 key_code = '000' で結合といわれても、結合結果は「なし」。 最初のサンプルにあわせた形で続きを書かないと意味不明になってしまいます。

すると、全ての回答が全文表示されます。
  • kazne
  • ベストアンサー率66% (8/12)
回答No.1

こんばんは。えっとやろうとしてることの意味がよくわかりません。 AテーブルとBテーブルを関連つけて、値を取得したいのは分かりましたが、 >Bテーブルのcd1~cd10に格納されている各コード単位に集計した ってのと、 >Bテーブルのcd(1~10) = '10' で集計した Aテーブルの ってのががよくわかりません。 AテーブルとBテーブルは同じプライマリキーを使う使用になっているみたいなので むしろ、Bテーブルを経由する意味がわかりません。 はじめから、Aテーブルの key_code='001'とかで抽出すれば、取得したいデータ取れるんでは? もし、Bテーブルのcd1~cd10ってのが、Aテーブルのkey_codeを保持してるってんなら クロス集計になりますよね。それ自体は意図は理解できますが それなら、 「Aテーブルの key_code とBテーブルの key_code を関連付けて」 なんて言葉は絶対にでてこないはずなんですが。

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう