- PR -

SQLでの集計について

1
投稿者投稿内容
こぶ
会議室デビュー日: 2006/11/14
投稿数: 11
投稿日時: 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を
どのようにしてしたら良いか教えてください。

以上 よろしくお願いします。
こぶ
会議室デビュー日: 2006/11/14
投稿数: 11
投稿日時: 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

他に方法のご存知の方おられましたらアドバイスを
お願いします。

以上 よろしくお願いします。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)