XAMPPにあるMySQL(10.3.15-MariaDB)とPHP7.3.6でプログラムを自作しています。
下記の通り、材料と加工の集計を導き出し、集計を行うことを行いたいと思っています。
MySQL
1CREATE VIEW `flow_a120_sum_view` AS 2 WITH `maxq` AS ( 3 SELECT 4 *, 5 CONCAT ( `pnum_`, `bnum_` , `inum_` ) AS `_sid_`, 6 MAX(`pnow_`) OVER ( PARTITION BY `pnum_`, `bnum_`,`inum_`, `pslct`, `enum_`) AS `mxpnw` 7 FROM 8 `flow_a120tbl` 9 ) 10SELECT 11 `_sid_`, 12 COUNT(`pmony` <> 0 or NULL) AS `_evq_`, 13 SUM( CASE `pslct` WHEN '材料' THEN `pmony` ELSE 0 END ) AS `smmtm`, 14 SUM( CASE `pslct` WHEN '加工' THEN `pmony` ELSE 0 END ) AS `smprm` 15 16FROM 17 `maxq` 18WHERE 19 `pnow_` = `mxpnw` 20GROUP BY 21 `pnum_`, 22 `bnum_`, 23 `inum_` 24;
上記の方法だと「pnow_
値が最大のとき」のレコードを抽出することができました。
これに付け加えて「gnum_
値が最大のとき」も条件に加えるにはどうすればよいのでしょうか。
やってみたこと
- 「
pnow_
値が最大のとき」の構文「MAX(pnow_
) OVER ( PARTITION ・・・(略)」を複製して「MAX(gnum_
) OVER ( PARTITION ・・・(略)」を追記してみましたがうまくいきませんでした。
MySQL
1CREATE VIEW `flow_a120_sum_view` AS 2 WITH `maxq` AS ( 3 SELECT 4 *, 5 CONCAT ( `pnum_`, `bnum_` , `inum_` ) AS `_sid_`, 6 MAX(`pnow_`) OVER ( PARTITION BY `pnum_`, `bnum_`,`inum_`, `pslct`, `enum_`) AS `mxpnw`, 7 MAX(`gnum_`) OVER ( PARTITION BY `pnum_`, `bnum_`,`inum_`, `pslct`, `enum_`) AS `mxgnw` 8 FROM 9 `flow_a120tbl` 10 ) 11SELECT 12 `_sid_`, 13 COUNT(`pmony` <> 0 or NULL) AS `_evq_`, 14 SUM( CASE `pslct` WHEN '材料' THEN `pmony` ELSE 0 END ) AS `smmtm`, 15 SUM( CASE `pslct` WHEN '加工' THEN `pmony` ELSE 0 END ) AS `smprm` 16 17FROM 18 `maxq` 19WHERE 20 `pnow_` = `mxpnw` AND `gnum_` = `mxgnw` 21;
やりたいこと
- 材料費と加工費の計算(レコードごとの合計)を行う前に、
pnow_
とgnum_
の値が最大値と同じレコードを抽出し、材料費と加工費の集計を行いたいです。
入力されるデータ例
管理No | 品名 | 費用区分 | 費用金額 | 現行工程 | 最終工程 | グループコード |
---|---|---|---|---|---|---|
K01 | りんご | 材料費 | 50 | 02 | 16 | 02 |
K01 | りんご | 材料費 | 50 | 12 | 16 | 09 |
K01 | りんご | 加工費 | 150 | 12 | 16 | 09 |
K01 | りんご | 材料費 | 50 | 12 | 16 | 11 |
K01 | りんご | 加工費 | 150 | 12 | 16 | 11 |
現在の出力データ例
管理No | 品名 | 材料費合計 | 加工費合計 | 現行工程 | 最終工程 | グループコード |
---|---|---|---|---|---|---|
K01 | りんご | 100 | 300 | 12 | 16 | 11 |
※材料費と加工費の合計を出す際、現在工程pnow_
が最大値のレコードだけを抽出しているため、グループコードgnum_
が最大値の時も抽出条件に加えないと凡例のデータで抽出した場合、2レコード分の合計を計算してしまっている
出力させたいデータ例
管理No | 品名 | 材料費合計 | 加工費合計 | 現行工程 | 最終工程 | グループコード |
---|---|---|---|---|---|---|
K01 | りんご | 50 | 150 | 12 | 16 | 11 |
回答3件
あなたの回答
tips
プレビュー