ここから本文です

下記の通り、SQL文を書きました。

アバター

ID非公開さん

2019/11/1217:57:00

下記の通り、SQL文を書きました。

--------------------------------------
SELECT
`cnum`,
`cname`,
`pnum`,
`bnum`,
`dnum`,
`pname`,
`psize`,
`pmate`,
`parea`,
`pclass`,
`sq`,
`pq`,
SUM(CASE `pselect` WHEN '仕入' THEN `pmoney` ELSE 0 END)AS `sum_m_section`,
SUM(CASE `pselect` WHEN '製造' THEN `pmoney` ELSE 0 END)AS `sum_i_section`,
SUM(CASE `pselect` WHEN '出荷' THEN `pmoney` ELSE 0 END)AS `sum_t_section`,
`pnow`,
`plast`
FROM
`flw_table`
GROUP BY
`pnum`,
`inum`,
`dnum`
ORDER BY
`cnum`,
`pnum`,
`bnum`
--------------------------------------
この実行結果全体に対し、”「pnow」が最大値 かつ 上記SQL文”となるようにするには、どのようにすればよいのでしょうか。

補足このSQL文の`pnow`をMAX(`pnow`)で実行すると、「pnow」が最大値だけでなく複数のレコードが抽出されてしまうらしく、`pmoney`の集計の際にレコードが重複して`pmoney`×2となってしまいます。

WHEREでpnow = MAX(pnow)で試すとpnowの最大値が抽出されるのですが、これだとメインとなるSQL文にあるSUM部分が集計されません。

pnowがpnowの最大値と一緒になるレコードには、pselect値「仕入・製造・出荷」の3パターンが存在します。
場合によっては、pselect値の「仕入」に該当するレコードが2個以上になることもあります。
当方の希望としては、pnowがpnow値の最大値と一緒【かつ(AND)】pselect値ごとにpmoney値の合計を集計したいのです。

この辺をプログラムで制御したいところですが、今回はプログラムを使用することができません。

閲覧数:
16
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nora1962jpさん

2019/11/1219:32:22

group byで指定していない項目を集約関数外で指定してもエラーにならずテキトーな値を持ってくる、何を持ってくるかは保証がないというのはMySQLのいい加減な方言ですが。

> この実行結果全体に対し、”「pnow」が最大値 かつ 上記SQL文”となるようにする

とは具体的にどんなことですか。

  • アバター

    質問者

    ID非公開さん

    2019/11/1309:05:46

    先程補足事項を追記しました。

    当方の希望としては、pnowがpnow値の最大値と一緒【かつ(AND)】pselect値ごとにpmoney値の合計を集計したいのです。

    これを元に「ビュー」を作成して利用する予定です。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2019/11/13 14:02:45

とりあえず、一つのビューで完結しようとしたのですが、無理に一つのビューにこだわらなければいいことがわかりました。

そのため、一旦白紙にして「pnow値がpnowの最大値と一致する」という部分を図解する画像を作って、もう一度質問しなおします。

ありがとうございました。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる