- - PR -
SQLでの集計について
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2007-05-13 00:49
こんにちは。こぶです。
SQLにて集計結果を出すにあたり結果が正しく取得 できません。アドバスをお願いします。 URIテーブルを下記SQLにて抽出しGAKUを取得(集計) したいのですがGAKUの値が正しく集計されません。 <SQL> SELECT A.CODE, A.NAME, SUM(A.GAKU), SUM(B.GAKU) FROM URI A, URI B WHERE A.DATE >= 0101 AND A.DATE <= 0110 AND B.DATE >= 0101 AND B.DATE <= 0120 AND A.NO = B.NO AND A.NAME = B.NAME GROUP A.CODE,A.NAME ORDER BY A.CODE <URIテーブル> +----+----+-------+-------+-------+ |NO |CODE|NAME |DATE |GAKU | +----+----+-------+-------+-------+ | 1|0001|ABE |0101 | 1 | | 2|0001|ABE |0105 | 2 | | 3|0001|ABE |0106 | 3 | | 4|0001|ABE |0107 | 4 | | 5|0001|ABE |0115 | 5 | | 6|0001|ABE |0117 | 6 | | 7|0001|ABE |0120 | 7 | | 8|0002|AKA |0105 | 8 | | 9|0002|AKA |0115 | 9 | | 10|0002|AKA |0118 | 1 | | 11|0002|AKA |0122 | 2 | | 12|0003|YAMA |0125 | 3 | +----+----+-------+-------+-------+ <期待している結果> +----+-------+-------+-------+ |CODE|NAME |A.GAKU |B.GAKU | +----+-------+-------+-------+ |0001|ABE | 10 | 18 | |0002|AKA | 8 | 10 | +----+-------+-------+-------+ <上記SQLで出力される結果> +----+-------+-------+-------+ |CODE|NAME |A.GAKU |B.GAKU | +----+-------+-------+-------+ |0001|ABE | 10 | 10 |3,3 |0002|AKA | 8 | 8 |1,2 +----+-------+-------+-------+ <SQLを少し変更するとこのような結果もありました> +----+-------+-------+-------+ |CODE|NAME |A.GAKU |B.GAKU | +----+-------+-------+-------+ |0001|ABE | 30 | 21 |3,3 |0002|AKA | 16 | 10 |1,2 +----+-------+-------+-------+ 申し訳ありませんが、期待する結果を取得する為には、SQLを どのようにしてしたら良いか教えてください。 以上 よろしくお願いします。 |
|
投稿日時: 2007-05-13 01:30
すみません。自己解決しました。
掲示板をいろいろ探していましたらしたかった 内容がずばり載っていて参考したところ解決しました。 お騒がせしました。 この掲示板に書き込むまでは半日ほど悩んだのですが 書き込んだとたんの解決でしたm(__)m ちなみに解決策としては、 SELECT A.CODE, A.NAME, SUM(CASE WHEN A.DATE >= 0101 AND A.DATE <= 0110 THEN A.GAKU END) AS A.GAKU, SUM(CASE WHEN A.DATE >= 0111 AND A.DATE <= 0120 THEN A.GAKU END) AS B.GAKU, FROM URI A GROUP A.CODE,A.NAME ORDER BY A.CODE 他に方法のご存知の方おられましたらアドバイスを お願いします。 以上 よろしくお願いします。 |
|
投稿日時: 2007-05-13 03:46
元投稿のSQLを読んでも「A」「B」が何を意味するのかサッパリわからなかったのですが、期待した結果が得られたSQLでやっとわかりました(汗
#URIテーブルなのに「A」がどこから出てくるのか未だにわからない・・ 単一のテーブルなら SELECT CODE, NAME , SUM(CASE WHEN DATE >= 0101 AND DATE <= 0110 THEN GAKU END) AS GAKU_A , SUM(CASE WHEN DATE >= 0111 AND DATE <= 0120 THEN GAKU END) AS GAKU_B FROM URI GROUP CODE, NAME ORDER BY CODE などと書きそうなものですが(DATEはURI.DATEと書かないとダメかも=DATEという列名はどーなんでしょう・・)。 |
1
