-PR-
締切済み

SQLで部分的にGROUP BYしたいとき(その2

  • 困ってます
  • 質問No.7670409
  • 閲覧数401
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 77% (27/35)

こんばんわ。
先日こちら(http://okwave.jp/qa/q7666702.html)
で質問させていただきましたが、まだ問題があったため、
再度質問させていただきます。
以下のような20カラムある「出納帳」テーブルがあって、
同一日付の金額を集約してしまいたいです。

出納帳
ID 日付   金額 伝票 ・・・(全20カラム)
1 2012/8/20 1000 A01 ・・・
2 2012/8/20 2000 A02 ・・・
3 2012/8/21 -1000 B01 ・・・
4 2012/8/21 -2000 B02 ・・・
5 2012/8/22 3000 A03 ・・・
6 2012/8/23 4000 A04 ・・・
7 2012/8/24 -3000 B03 ・・・
8 2012/8/24 -4000 B04 ・・・
9 2012/8/27 5000 A05 ・・・

↓「日付」で金額集約

ID 日付   金額 伝票 ・・・(全20カラム)
1 2012/8/20 1000 A01 ・・・
2 2012/8/20 2000 A02 ・・・
 2012/8/21 -3000    ・・・(-1000と-2000を集約)
5 2012/8/22 3000 A03 ・・・
6 2012/8/23 4000 A04 ・・・
 2012/8/24 -7000    ・・・(-3000と-4000を集約)
9 2012/8/27 5000 A05 ・・・


と集約キー以外はNULLにしたいのですが、
またまた、

(
SELECT ID, 日付, 金額, 伝票, ・・・
FROM  出納帳
WHERE  金額>=0
UNION ALL
SELECT NULL, 日付, SUM(金額), NULL, ・・・
FROM  出納帳
WHERE  金額<0
GROUP BY 日付
)
ORDER BY 日付

とUNIONをする方法しか思いつかなかったのですが、
UNIONせずに端的に表現できるSQLはありますでしょうか?
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル9

ベストアンサー率 76% (55/72)

--端的かどうかはともかく……
SELECT
MAX(CASE WHEN 金額 < 0 THEN NULL ELSE ID END) AS ID,
日付, SUM(金額) AS 金額,
MAX(CASE WHEN 金額 < 0 THEN NULL ELSE 伝票 END) AS 伝票
FROM 出納帳
GROUP BY 日付, CASE WHEN 金額 < 0 THEN 0 ELSE ID END;
--UNION使ったほうが分かりやすくていいかも……
お礼コメント
ultra789

お礼率 77% (27/35)

前回に引き続きご回答ありがとうございます。
なるほど!そうすればUNIONを用いずできますね!
ですが、たしかに仰るとおり、SELECT句が複雑だなと感じます。
可読性の意味でメンテが難しいかなとおもいます。
投稿日時 - 2012-08-30 12:12:07


  • 回答No.2
レベル13

ベストアンサー率 35% (315/892)

これって、単に金額が+なら、1行ずつ出力して、
-なら、日付でgroup byして出力したいってこと?

SELECT case when 金額>0 then ID else Null end, 日付, sum(金額),
case when 金額>0 then 伝票 else Null end, ・・・
FROM  出納帳
group by case when 金額>0 then ID else Null end, 日付,
case when 金額>0 then 伝票 else Null end, ・・・
order by 日付,case when 金額>0 then ID else Null end

ででるはずですが(未検証ですが。)
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ