
こんばんわ。
先日こちら(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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- ふるさと納税 個人年金の受取金に住民税がかかるのか? 3 2022/06/22 22:17
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- 印紙税 遅延料金 1 2023/03/07 19:05
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- その他(税金) 納税貯蓄組合に対する補助金の使途について 2 2023/07/17 07:57
- 国民年金・基礎年金 【詳しい方】国民年金保険料追納について教えてください! 国民年金保険料追納の案内はがきがきました。 3 2022/09/17 20:51
- その他(暮らし・生活・行事) 町内費からの寄付金の勘定項目を教えてください。 3 2022/10/08 16:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
Accessの数値から時間に変換す...
-
DB2のSQL(日付)について
-
SQLで今日の日付でWhereしたい
-
テーブルの主キーをdate型...
-
wordの差し込み印刷での日付表示
-
日付の切り出し方法について
-
SQLサーバで和暦から西暦に変換...
-
SQL ブレーク処理について
-
日付型なら変数の先頭になん...
-
23時59分59秒までのデータを抽...
-
WHERE句にて「30日前から今日ま...
-
重複するIDのデータを1行にま...
-
日付時刻+連番の主キーをSQLだ...
-
Excelの並び替え(先頭の文字以...
-
Excelグラフの日付軸の日付がず...
-
DATE型の省略値について
-
SQLで部分的にGROUP BYしたいとき
-
Accessのマクロでモジュールを...
-
Statement ignored というエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
今日の日付が入った行のデータ...
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
Accessの数値から時間に変換す...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
SQLサーバで和暦から西暦に変換...
-
テーブルの主キーをdate型...
-
エクセル 日付による並べ替え...
-
日付書式に変換でこまっています!
-
日数算出SQL
-
日付の切り出し方法について
-
指定した年月までのデータを取...
-
wordの差し込み印刷での日付表示
-
OSのシステム日付を変更して...
-
Excelグラフの日付軸の日付がず...
-
日付の最大値レコードを取得す...
-
特定の日付が第何週目にあるか...
-
OSのシステム日付を変更して...
-
excel 日付のみ置換したいのです
-
WHERE句にて「30日前から今日ま...
おすすめ情報