
こんばんわ。
先日こちら(http://oshiete.goo.ne.jp/qa/7666702.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はありますでしょうか?
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
これって、単に金額が+なら、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
ででるはずですが(未検証ですが。)
No.1
- 回答日時:
--端的かどうかはともかく……
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使ったほうが分かりやすくていいかも……
前回に引き続きご回答ありがとうございます。
なるほど!そうすればUNIONを用いずできますね!
ですが、たしかに仰るとおり、SELECT句が複雑だなと感じます。
可読性の意味でメンテが難しいかなとおもいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessの数値から時間に変換す...
-
重複するIDのデータを1行にま...
-
SQLで部分的にGROUP BYしたいとき
-
SQL MAX関数を検索条件にする。
-
VBAについて
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SELECT結果の縦と横の入れ替え
-
日付の最大値レコードを取得す...
-
エクセルの日付に時差を加算 #V...
-
指定した年月までのデータを取...
-
一秒ごとに更新をかける方法
-
日付の切り出し方法について
-
Excelグラフの日付軸の日付がず...
-
SQL/Loaderでの年月日時分秒の...
-
order by の逆は・・・
-
日付型なら変数の先頭になん...
-
日付書式に変換でこまっています!
-
特定の日付が第何週目にあるか...
-
SQLサーバで和暦から西暦に変換...
-
テーブルの主キーをdate型...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
テーブルの主キーをdate型...
-
エクセル 日付による並べ替え...
-
日付書式に変換でこまっています!
-
日数算出SQL
-
日付の切り出し方法について
-
指定した年月までのデータを取...
-
wordの差し込み印刷での日付表示
-
OSのシステム日付を変更して...
-
Excelグラフの日付軸の日付がず...
-
日付の最大値レコードを取得す...
-
特定の日付が第何週目にあるか...
-
OSのシステム日付を変更して...
-
excel 日付のみ置換したいのです
-
WHERE句にて「30日前から今日ま...
おすすめ情報