- - PR -
SQL勉強中 結合の仕方教えてください
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-01-20 11:54
3日前からSQL勉強中のトミと申します。
どなたか教えていただければと思うのですが・・・ @SELECT USER_ID , SUM(KINGAKU) "HARAI_200110" FROM T_HARAI WHERE SUBSTR(HARAI_DATE,1,6) = '200110' GROUP BY USER_ID ; /*実行結果*/↓ USER_ID HARAI_200110 -------------------- ------------ TZW 520000 ZSR 6500 ACSELECT USER_ID , SUM(KINGAKU) "KARIBARAI_200110" FROM T_KARIBARAI WHERE SUBSTR(HARAI_DATE,1,6) = '200110' GROUP BY USER_ID ; /*実行結果*/↓ USER_ID KARIBARAI_200110 -------------------- ---------------- MORI 2000 TZW 1150000 ZSR 135300 上記の@,Aをあわせた合計金額として USER_ID (SUM(T_HARAI.KINGAKU)+SUM(T_KARIBARAI.KINGAKU)) --------- ---------------------------- MORI 2000 TZW 1670000 ZSR 141800 ↑を導き出したいのですがうまくいきません。 UNIONを使えばよいのでしょうか、 それとも複数の表から情報を得る手段として 表(T_HARAIとT_KARIBARAI)を結合すればよいのでしょうか それとも副問い合わせの形式を使うのでしょうか? HARAI_DATE が 2000年10月又は2001年10月の両テーブルの KINGAKU の合計値をユーザごとに求めたいのですが… |
|
投稿日時: 2005-01-20 12:22
msoです。
せめて、DBは何を使っているのかを明確にしたほうが より適切な回答があるとおもいますが。。。 えっと、@とAをそれぞれインラインビューにして、 求めてはどうでしょうか? |
|
投稿日時: 2005-01-20 12:39
失礼致しました。
DBはオラクルを使っています。 |
|
投稿日時: 2005-01-20 13:01
SELECT USER_ID,SUM(HOGE) AS KINGAKU
FROM ( SELECT USER_ID , SUM(KINGAKU) AS HOGE FROM T_HARAI WHERE SUBSTR(HARAI_DATE,1,6) = '200110' GROUP BY USER_ID UNION ALL SELECT USER_ID , SUM(KINGAKU) AS HOGE FROM T_KARIBARAI WHERE SUBSTR(HARAI_DATE,1,6) = '200110' GROUP BY USER_ID ) AS HOGETABLE GROUP BY USER_ID ; 一番簡単なパターンですが、間違っていたらすいません。 |
|
投稿日時: 2005-01-20 13:07
追記です。
substrを集計に使うとテーブル全件なめる必要があるのでお勧めできません。 HARAI_DATE LIKE '200110%"であればインデックス張っていれば取得できますのでこちらのほうがまだいいと思います。 |
|
投稿日時: 2005-01-20 13:48
返信くださった皆様ありがとうございます。
皆さんのおかげでここまで求めることが出来ました↓ BSELECT USER_ID,SUM(KINGAKU2001) AS TOUGETU FROM ( SELECT USER_ID , SUM(KINGAKU) AS KINGAKU2001 FROM T_HARAI WHERE HARAI_DATE LIKE '200110%' GROUP BY USER_ID UNION ALL SELECT USER_ID , SUM(KINGAKU) AS KINGAKU2001 FROM T_KARIBARAI WHERE HARAI_DATE LIKE '200110%' GROUP BY USER_ID ) GROUP BY USER_ID ; USER_ID KINGAKU -------------------- ---------- MORI 2000 TZW 1670000 ZSR 141800 上と同じようにもうひとつ求めました。↓ CSELECT USER_ID,SUM(KINGAKU2000) AS ZEN_DOUGETU FROM ( SELECT USER_ID , SUM(KINGAKU) AS KINGAKU2000 FROM T_HARAI WHERE HARAI_DATE LIKE '200010%' GROUP BY USER_ID UNION ALL SELECT USER_ID , SUM(KINGAKU) AS KINGAKU2000 FROM T_KARIBARAI WHERE HARAI_DATE LIKE '200010%' GROUP BY USER_ID ) GROUP BY USER_ID ; USER_ID ZEN_DOUGETU -------------------- ----------- ADC 122000 KAT 2250000 KOJIMA 1000 MKA 75000 MORI 128820 NKMR 550000 NOZUKI 55000 NRC 201120 OBA 55000 OTANI 138800 TANIGUCHI 51340 TEZ 247400 TOMI 320000 TZW 1130000 WADA 194980 WTS 550000 YAMATO 70000 YKS 253000 ZSR 28700 nishi 112030 BとCから USER_ID ZEN_DOUGETU TOUGETU -------------------- ----------- ----------- ADC 122000 0 KAT 2250000 0 KOJIMA 1000 0 MKA 75000 0 MORI 128820 2000 NKMR 550000 0 NOZUKI 55000 0 NRC 201120 0 OBA 55000 0 OTANI 138800 0 TANIGUCHI 51340 0 TEZ 247400 0 TOMI 320000 0 TZW 1130000 1670000 WADA 194980 0 WTS 550000 0 YAMATO 70000 0 YKS 253000 0 ZSR 28700 141800 nishi 112030 0 を求めるにはどう結合したらいいかも教えていただければうれしいのですが・・・ |
|
投稿日時: 2005-01-20 14:09
最後の結果の表が見ずらくなってしまったので
もう一度載せます。 USER_ID ZEN_DOUGETU TOUGETU ------------- ----------- ----------- ADC 122000 0 KAT 2250000 0 KOJIMA 1000 0 MKA 75000 0 MORI 128820 2000 NKMR 550000 0 NOZUKI 55000 0 NRC 201120 0 OBA 55000 0 OTANI 138800 0 TANIGUCHI 51340 0 TEZ 247400 0 TOMI 320000 0 TZW 1130000 1670000 WADA 194980 0 WTS 550000 0 YAMATO 70000 0 YKS 253000 0 ZSR 28700 141800 nishi 112030 0 |
|
投稿日時: 2005-01-20 15:31
横槍で申し訳ありませんが。
入力と出力だけ示して SQL を他の人に作ってもらうのではなく、ご自分でどう考えて、どこまでわかった、どこがわからないかを述べ、わからない点のみ教示していただくという姿勢に改めていただけませんでしょうか。 せめて入力の各行について、どういう場合に出力の対応行がどうなるかくらい、読んだ方に考えさせるのではなく、ご自分で考えてから書き込んでください。 整理ができれば、ご自分でプログラムにするのも容易になると思います。 あと、「副問い合わせ」の中で UNION を作って全体が複雑になり過ぎているきらいがあるので、「CREATE VIEW 文」で SELECT の実行結果を一旦保持した方が、処理の見通しが良くなると思います。 最後に一言。 SQL を始めて三日にしては複雑なことに進みすぎていると感じました。 学習資料として何をお使いかわかりませんが、もう少し初歩から順を追って学習された方がよろしいと思います。 |