You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中基于双WHERE条件按PCK关联基础PRDS求和问题求助

SQL查询修正方案

问题核心

你当前的SQL同时通过BOPPRDCD和OUTPRDCD做筛选,只能查询单一PCK组合下的单一组件数据,无法满足"汇总基础PRDS在不同PCK组合中数据"的需求;另外分组和排序逻辑也存在不符合SQL规范的问题,导致结果异常。

当前代码的问题点

  1. WHERE条件限制过死:同时指定BOPPRDCD和OUTPRDCD,只能返回单个PCK组合下的单个组件数据,无法覆盖多个PCK组合的场景
  2. GROUP BY不符合规范:仅按OUTPRDNAME分组,但SELECT中包含多个未聚合的字段(如OUTPRDSRL、BOPPRDCD),在严格SQL模式下会报错,非严格模式下返回结果不可控
  3. ORDER BY字段缺失:排序用的PRDSTGDES未在SELECT列表中声明,会引发语法错误

修正后的SQL代码

以下代码针对"汇总基础PRDS在各PCK组合中的数据"需求编写,同时符合SQL规范:

$sql="SELECT 
         bom.BOPPRDCD AS PCK组合,
         bom.OUTPRDNAME AS 基础PRDS,
         SUM(bom.REQQTY) AS 总需求量,
         SUM(bom.TOTALVALUE) AS 总价值,
         SUM(bom.TOTALVALUE * b_master.calculation)/100 + SUM(bom.TOTALVALUE) AS 最终总价值
      FROM bom
      INNER JOIN b_master ON bom.PRDSTGCD = b_master.PRDSTGCD
      WHERE bom.OUTPRDCD = '$OUTPRDCD' -- 仅筛选基础PRDS
      GROUP BY bom.BOPPRDCD, bom.OUTPRDNAME -- 按PCK组合+基础PRDS分组
      ORDER BY bom.BOPPRDCD";

额外建议:避免SQL注入风险

直接将变量拼入SQL存在注入风险,建议改用预处理语句(以PDO为例):

$stmt = $pdo->prepare("SELECT 
         bom.BOPPRDCD AS PCK组合,
         bom.OUTPRDNAME AS 基础PRDS,
         SUM(bom.REQQTY) AS 总需求量,
         SUM(bom.TOTALVALUE) AS 总价值,
         SUM(bom.TOTALVALUE * b_master.calculation)/100 + SUM(bom.TOTALVALUE) AS 最终总价值
      FROM bom
      INNER JOIN b_master ON bom.PRDSTGCD = b_master.PRDSTGCD
      WHERE bom.OUTPRDCD = ?
      GROUP BY bom.BOPPRDCD, bom.OUTPRDNAME
      ORDER BY bom.BOPPRDCD");
$stmt->execute([$OUTPRDCD]);
$result = $stmt->fetchAll();

内容的提问来源于stack exchange,提问作者vickeyb4u

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:10:37