DBは、Mysqlです。どうかアドバイスをいただきたいです。
宜しくお願いします。
以下のようなテーブル table1 があります。
*******************
table1
*******************
銀行名, 出金, 入金, 月
*******************
A, 100, 0, 2月
B, 0, 100, 2月
A, 0, 100, 2月
A, 100, 0, 3月
B, 100, 0, 3月
B, 0, 100, 3月
A, 100, 0, 3月
B, 0, 100, 4月
...
*******************
3月時点の各口座の出金合計、入金合計、前月残高、翌月繰越を求めたいです。
select
(SUM(t.入金) - SUM(t.出金)) as 前月残高,
SUM(t.入金) as 入金合計,
SUM(t.出金) as 出金合計,
(SUM(t.入金) - SUM(t.出金)) as 翌月繰越
from table1 as t
selectは、こんな感じでまとめたいのですが、それぞれの条件が3月、3月以前、3月以後と異なっているために、一つのselectにまとめられず、困っております。
自己結合なのか、サブクエリなのか、別の方法なのか。
アドバイス頂けたらと思います。
宜しくお願いします
No.2ベストアンサー
- 回答日時:
SELECT
B.月
, F.前月残高
, B.出金合計
, B.入金合計
, F.前月残高 + B.入金合計 - B.出金合計 AS 翌月繰越
FROM
( SELECT
A.月
, SUM(A.出金) AS 出金合計
, SUM(A.入金) AS 入金合計
FROM
table1 AS A
GROUP BY
A.月
) AS B
, ( SELECT
D.月
, IFNULL(SUM(E.入金), 0) - IFNULL(SUM(E.出金), 0) AS 前月残高
FROM
( SELECT
C.月
FROM
table1 C
GROUP BY C.月
) AS D
LEFT JOIN table1 AS E
ON D.月 > E.月
GROUP BY
D.月
) AS F
WHERE
B.月 = F.月
銀行Aの2月というデータが複数件あるので、プライマリキーは不明ですが、
銀行ごと、月ごとというならば、GROUP BYしている単位をそれぞれ銀行および月で処理すれば宜しいかと思います。
ありがとうございます。
FROM内でのサブクエリですね。
サブクエリが不得手なので、解読に時間をかけてます。
もう、しばらくおまちください。
No.3
- 回答日時:
月は月初日を入れておくといいです
#1で指摘した通り、入出金のデータだけだと結局その前月からの
繰り越しがわからないので、ダミーで1月に各銀行に10000円ずつ入金しておきます
//元データ
create table table1(銀行名 varchar(10), 出金 int, 入金 int , 月 date);
insert into table1 values('A','0','10000','2016-01-01'),('B','0','10000','2016-01-01'),('B','0','100','2016-02-01'),('A','100','0','2016-02-01'),('B','0','100','2016-02-01'),('A','0','100','2016-02-01'),('A','100','0','2016-03-01'),('B','100','0','2016-03-01'),('B','0','100','2016-03-01'),('A','100','0','2016-03-01'),('B','0','100','2016-04-01');
//第一段階:月毎、銀行名毎の入出金および前繰は以下
select
月,銀行名
,(select coalesce(-sum(出金)+sum(入金),0) from table1 where 月<t1.月 and 銀行名=t1.銀行名) as 前月繰越
,sum(出金) as 出金計
,sum(入金) as 入金計
from table1 as t1
group by 月,銀行名
これに次繰を表示するとこうなる
select 月,銀行名,前月繰越,出金計,入金計,前月繰越-出金計+入金計 as 次月繰越
from (
select
月,銀行名
,(select coalesce(-sum(出金)+sum(入金),0) from table1 where 月<t1.月 and 銀行名=t1.銀行名) as 前月繰越
,sum(出金) as 出金計
,sum(入金) as 入金計
from table1 as t1
group by 月,銀行名
) as sub
これのうち、3月のデータをとるので
select 月,銀行名,前月繰越,出金計,入金計,前月繰越-出金計+入金計 as 次月繰越
from (
select
月,銀行名
,(select coalesce(-sum(出金)+sum(入金),0) from table1 where 月<t1.月 and 銀行名=t1.銀行名) as 前月繰越
,sum(出金) as 出金計
,sum(入金) as 入金計
from table1 as t1
group by 月,銀行名
) as sub
where 月='2016-03-01'
ここで問題、命題では4月のA銀行は入出金データがない
入出金データがない月は前繰も次繰も拾えないので、カレンダーテーブルを
別途つくって処理するなど工夫が必要です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- MySQL あっってますか?うまくいきません教えてくださいお願いします?? 2 2023/07/01 13:02
- Visual Basic(VBA) 列 A に同じ日が2つが必要です。 1 2023/03/28 07:25
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- 公認会計士・税理士 地代家賃と前払費用の決算整理仕訳 1 2023/02/25 08:14
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- 所得税 所得税額の決定時期について 毎年決まる所得税の金額について、4月~6月の所得額の平均で決まると聞いた 3 2023/01/28 14:58
- その他(お金・保険・資産運用) 奨学金返済滞納でブラリス入れられるのって3ヶ月連続で滞納した場合ですよね? 1ヶ月滞納して次の月にま 1 2023/02/18 19:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テーブル名が可変の場合のクエ...
-
テーブル所有者、スキーマ所有...
-
下記の問合せを行うクエリを、P...
-
#1062 - '0' は索引 'PRIMARY' ...
-
my_itemsテーブルのIDにAUTO_IN...
-
SQLです。こんな感じですか?あ...
-
mysqlがインストールされている...
-
sqlにおけるテーブル名と各カラ...
-
php テーブルを作れない
-
SQLiteについて
-
下記の問合せを行うクエリを、P...
-
書籍の内容はまともでしょうか?
-
はもうダメですか?
-
MySQL NULLだけをカウントして...
-
SQL文のエラー
-
htmlコードで書かれた表にphpで...
-
`picture` varchar(255) のコマ...
-
参考書に従って入力したつもり...
-
SQLでカラムを追加し、条件に合...
-
PHPで「myql関数」が使用できな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VIEWに対してWHERE句をつける
-
空白文字を含む文字列データの検索
-
JOIN使ってないのに、JOIN操作...
-
コマンドプロンプト 複数の実...
-
複数の条件がある場合のsqlの書...
-
SQLのエイリアス
-
Mysql 同一テーブルの複数「別...
-
count()の結果を別の計算で使う...
-
sqlの中で、 例えば条件句で AN...
-
Null値が入れられない
-
nullと同じく空白をCountしない...
-
NULLを含む列の足し算
-
MySQLの特定のカラムの内容を全...
-
SQLでLIMIT句を入れるとエラー...
-
SQL任意に並び替えをしたい
-
テーブル作成時に、「`id` int(...
-
MySQLで関連したデータを横に並...
-
SQL文を入力したらエラー
-
SELECT文の二段重ね
-
phpでnot null、a_iでテーブル作成
おすすめ情報
回答ありがとうございます。
table1は、ある月の入出金のデータです、実際には、日付のデータになっています。
IDも存在します。
ほしい結果は、3月時点の各銀行の数字なので(4月のデータは見ません)、
A銀行 前月残:0 当月入金:0 当月出金:200 繰越:-200
B銀行 前月残:100 当月入金:100 当月出金:100 繰越:100
頂いた回答は検証しております。
もし、認識と違うようでしたら、再度アドバイスをお願いします。
宜しくお願いします。
お二人のアドバイスをいただき、無事に取得できました。
ありがとうございます。
一番参考にさせて頂いた方に、ベストアンサーにさせて頂きました。
作成したSQLでのポイントは
select xxx
from
(select xxx ) as b,
(select xxx ) as c
の部分と、最後のWHEREのところでした。
とても参考になりました。
ありがとうございます。