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

如何编写适配项目经理、业务单元或账号的统计SQL查询

统一SQL查询方案:根据任一条件过滤统计

我来帮你搞定这个统一查询的需求!你可以通过参数化条件判断来实现,既灵活还能避免SQL注入风险,下面给你两种实用的实现方式:

方式一:优先级式条件判断(推荐)

这种方式会按优先级依次检查参数,只有第一个非空的参数会生效(比如优先用项目经理条件,其次业务单元,最后账号);如果所有参数都为空,你可以选择返回空结果或者全量统计,这里默认返回空:

SELECT 
  statusid,
  COUNT(statusid) AS status_count, -- 给统计字段起别名更易读
  SUM(totalamount) AS total_amount
FROM intrahrms_rems_reimbursement
WHERE 
  CASE 
    WHEN @projectmanagerid IS NOT NULL THEN projectmanagerid = @projectmanagerid
    WHEN @businessunitid IS NOT NULL THEN businessunitid = @businessunitid -- 注意你之前的查询里拼写错了,是businessunitid不是businesunitid
    WHEN @accountsid IS NOT NULL THEN accountsid = @accountsid
    ELSE 1 = 0 -- 所有参数为空时返回空结果,改成1=1可返回全量统计
  END
GROUP BY statusid;

方式二:多条件任选(支持同时传多个参数)

如果你需要支持同时传入多个参数(比如既按项目经理又按业务单元过滤),可以用OR结合非空判断:

SELECT 
  statusid,
  COUNT(statusid) AS status_count,
  SUM(totalamount) AS total_amount
FROM intrahrms_rems_reimbursement
WHERE 
  (@projectmanagerid IS NULL OR projectmanagerid = @projectmanagerid)
  AND (@businessunitid IS NULL OR businessunitid = @businessunitid)
  AND (@accountsid IS NULL OR accountsid = @accountsid)
GROUP BY statusid;

注意:这种写法如果多个参数都传值,会同时应用所有过滤条件,返回满足所有条件的结果。

补充小提示

  • 这里的@projectmanagerid、@businessunitid、@accountsid是参数占位符,不同数据库写法略有差异:MySQL用?或@,SQL Server用@,PostgreSQL用$1、$2等,你根据自己用的数据库调整就行。
  • 一定要用参数化查询,别直接拼接字符串,防止SQL注入攻击。
  • 记得修正你之前第二个查询里的字段拼写错误:businesunitid应该是businessunitid哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:33:05