図を見て頂きたいと思います。
expor1000と勘定科目コードは同じです。
EXpor1001と勘定科目のフィールドは同じです。
金額(費用)と金額(収益)も同じ内容ですが計算の向きだけ違います。
これを下のデータの様に、
Expr1000 | Expr1001 | 金額(費用) | 勘定科目コード | 勘定科目 | 金額(収益) |
---|---|---|---|---|---|
4001 | 仕入 | 25000 | 5001 | 売上 | 3500 |
4002 | 売上原価 | 0 | 5002 | 商品売買益 | 0 |
4003 | 発送費 | 0 | 5003 | 受取手数料 | 0 |
4004 | 減価償却費 | 500000 | 5004 | 受取家賃 | 0 |
4005 | 広告宣伝費 | 120000 | 5005 | 受取利息 | 0 |
4006 | 通信費 | 7000 | 5006 | 受取配当金 | 0 |
4007 | 水道光熱費 | 10000 | 5007 | 雑益 | 0 |
4008 | 租税公課 | 0 | 5008 | 有価証券利息 | 0 |
4009 | 給料 | 0 | 5009 | 有価証券売却益 | 0 |
4010 | 旅費交通費 | -14000 | 5010 | 固定資産売却益 | 0 |
4011 | 支払保険料 | 0 | 5011 | 償却債権取立益 | 0 |
4012 | 消耗品費 | 4000 | |||
4013 | 雑損 | 0 | |||
4014 | 貸倒引当金繰入 | 0 | |||
4015 | 貸倒損失 | 0 | |||
4016 | 支払利息 | 0 | |||
4017 | 手形売却損 | 0 | |||
4018 | 有価証券売却損 | 0 | |||
4019 | 固定資産売却損 | 0 |
左側のexpor1001と金額(費用)は、勘定科目コードが4000番台のみ表示して、
右側の勘定科目コードと金額(収益)は、
勘定科目コードが5000番代のみ表示したいです。
どのようにすればいいか教えて頂きたくお願い致します。
※掲示板管理者(hatena)が読みやすくするために書式を改善しました。
3パターンの SQL を載せておきます。
■ 集計クエリ
■ 自己結合
■ 完全外部結合
2020/01/24 (金) 15:00:34 に私が回答した後
2020/01/24 (金) 19:11:55 に投稿内容が編集されているようですが
その上で未解決ということは、もしかすると SQLの扱いが初めて なのでしょうか。
SQLは、フォームやレポートのレコードソースへも直に記述できるため
記述場所としては、色々あるわけですが
クエリを作るという状況において
SQLをどこに記述すればいいのか わからない
ということでしたら、以下をご覧になるといいでしょう。
なお、
損益計算書
上記のように、勘定科目コードの属性毎に欠番がある場合、
下3桁で完全外部結合するのではなく
同属の科目を昇順に並べるだけの場合は、SQLのロジックにもう一工夫必要になります。
ただし、データベースというのは 本来
第三者が見ても「 行単位でデータ構造を把握できる形 」になっている必要があり、
関連のない複数のデータが同じ行に並んでいるのは、不自然と言っていいでしょう。
投稿文のタグに クエリ・フォーム・レポート の3つが付与されていることから
どのオブジェクトにおいても段組で表示したい のだと想像しますが
コードの体系別に2列表示したいだけなら、レポートのみで行うことをお薦めします。
mayuさん、いつも回答ありがとうございます。
質問の編集は私が管理者権限で行いました。見やすくする為にテーブルをマークダウン書式にしました。
hatenaさん、こんにちは。
各方面でのご活躍、いつも拝見させていただいております。
管理者権限での表の編集、承知いたしました。わざわざのご連絡、ありがとうございます。
mayu様
回答ありがとうございます。
正に思う通りの内容を記載して頂いた上に、様々教えて頂き大変恐縮です。
SQLはわずかながらに読める程度なので後学の為に教えて頂きたいです。
教えて頂いた3つのうちの1つ、集計クエリでのGROUP BY句の部分です。
GROUP BY q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )
並びの肝の部分だと思うのですが、この条件式でなぜこんなきれいな並びになるかわかりません。
色々と調べてみてもわからないので教えて頂きたくお願い致します。
勘定科目コードの 4000番台と5000番台の下3桁同士を
同じグループ( 母集団 )に所属させるための演算になります。
例えば
・ 4000 と 5000 が同じグループ ( 4000 - 0 = 4000, 5000 - 1000 = 4000 )
・ 4011 と 5011 が同じグループ ( 4011 - 0 = 4011, 5011 - 1000 = 4011 )
・ 4999 と 5999 が同じグループ ( 4999 - 0 = 4999, 5999 - 1000 = 4999 )
になります。
( 並び替えも演算結果の数値順になるよう、ORDER BY句に同様の式を記述しています )
したがって、
は
と記述しても 同様の結果を得ることが可能です。
度重なる質問に対して誠にありがとうございます。
正直なところ力不足でまだ理解が追い付いていない部分もありますが、理解が出来る様に頑張っていきます。
また何かありましたら力を貸して頂ければ幸いです。
集計直前の状態をイメージできるとわかると思いますよ
SQLからGROUP BY句を消し、集計関数のMAXもなくすと
こんな感じになります
gEXはグループ化のために作った計算式をフィールドに表示してみるとってことです
gEXでグループ化し、各列MAXをとれば、MAXといっても2レコードの内片方にしか値がないので必ずその値を拾ってきます
並べたいレコードがちょうどセットになるようなgEXを作ればいいので
q.勘定科目コード - IIf( q.勘定科目コード < 5000, 0, 1000 )
はGROUP BY
だから何か特別なことをしているということはありませんついでに
ORDER BY
も同じ式を使っているので4001からきれいに並んでいるわけですね回答ありがとうございます。
まさか回答頂けると思わなかったので驚きました。
でも教えて頂いたおかげで理解が出来ました。
gEXはグループ化のために作った計算式をフィールドに表示してみるとってことです
↓
これで理解が出来ました。
group byの列は2つ同じ勘定科目コードを作成し、それをグループ化することで一行にできる。
それと同時にこのような事をすぐにわかる事が出来るのが本当にすごいと思いました。
自分もこのような難しい内容をすぐに出来る様になってみたいです。
本当に感謝しかありませんが、改めてありがとうございます。