質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1470閲覧

SQLで売掛残高表を作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/11/11 11:10

前提・実現したいこと

PHPとSQLの学習で、販売管理システムを作りながら学習しています。

次のような列を持った売掛残高画面を作成しているのですが、上手くいかず、
改善したいと思い質問させていただきます。
※まだ学習中で、そもそもSQLが間違えているかもしれないです。

<一覧表に必要な項目>
・得意先コード
・前月末残高
・当月入金額
・当月売上額
・消費税額

<データベース>
・売上データ (uriage_dt)
id int(11)
cd int(11)
nendo int(11)
tekiyou varchar(32)
uriagebi date
tokuisaki_mr_cd varchar(14)
torihiki_kbn_cd varchar(2)

・売上明細データ (uriage_meisai_dt)
id int(11)
cd int(11)
uriage_dt_id int(11)
shouhin_mr_cd varchar(20)
tekiyou varchar(40)
suuryou double
genka double
tanka double
kingaku int(11)
genkagaku int(11)
zeinukigaku int(11)
zeigaku int(11)

・入金データ (nyuukin_dt)
id int(11)
cd int(2)
nendo int(11)
nyuukinbi date
tokuisaki_mr_cd varchar(14)
tantou_mr_cd varchar(3)
zenkai_kesikomi_gaku int(11)

・入金明細データ (nyuukin_meisai_dt)
id int(11)
cd varchar(2)
name varchar(24)
nyuukin_dt_id int(11)
nyuukin_kbn_cd varchar(3)
kingaku double

該当のソースコード

SQL

3つのSQLを使用して、前月末残高と当月データを作成してPHPでループし配列をマージしています。

<得意先マスタ取得>
select cd as tokuisaki_mr_cd from tokuisaki_mrs

<前月残高>
select
uri.tokuisaki_mr_cd as tokuisaki_mr_cd ,
sum(uri_meisai.zeinukigaku) as zeinukigaku,
sum(uri_meisai.zeigaku) as zeigaku,
sum(nyu_meisai.kingaku) as nyuukingaku
from uriage_meisai_dt as uri_meisai
left join uriage_dt as uri on uri.id = uri_meisai.uriage_dt_id
left join nyuukin_dt as nyu on nyu.tokuisaki_mr_cd = uri.tokuisaki_mr_cd
left join nyuukin_meisai_dt as nyu_meisai on nyu_meisai.nyuukin_dt_id = nyu.id
where uri.uriagebi >= '2019-10-31'
group by uri.tokuisaki_mr_cd
※結果取得したものをPHPで zeinukigaku + zeigaku - nyuukingaku をして前月末残高としています。

<当月データ>
select
uri.tokuisaki_mr_cd as tokuisaki_mr_cd ,
sum(uri_meisai.zeinukigaku) as zeinukigaku,
sum(uri_meisai.zeigaku) as zeigaku,
sum(nyu_meisai.kingaku) as nyuukingaku
from uriage_meisai_dt as uri_meisai
left join uriage_dt as uri on uri.id = uri_meisai.uriage_dt_id
left join nyuukin_dt as nyu on nyu.tokuisaki_mr_cd = uri.tokuisaki_mr_cd
left join nyuukin_meisai_dt as nyu_meisai on nyu_meisai.nyuukin_dt_id = nyu.id
where uri.uriagebi between '2019-11-01' and '2019-11-30'
group by uri.tokuisaki_mr_cd

あとは取得したデータをPHPで得意先マスタへループしながら入れています。

出来れば、1回のSQLで一覧表が作成できると助かります。

よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/11/11 11:17

テーブルサンプルはcreate table+insertで書いてください 検証できるようなサンプルデータを提示の上 そのデータから導かれる期待する結果を例示ください
m.ts10806

2019/11/11 12:41 編集

作業依頼になっています。質問にしてください。 (何がどううまくいかないのか、起きている現象などは必須)
yambejp

2019/11/12 01:12

そんなに冷たくあしらったわけでもないのに なんですぐ退会するのだろう・・・
ironya

2019/11/12 15:43

解決したのなら良いですがね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問