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

SQL查询:筛选列名逻辑关联的字段满足指定条件的记录

可直接执行的原生SQL实现方案

方案1:静态SQL(无依赖、全环境兼容,优先使用)

核心逻辑是逐组匹配同项目的负责人、结果字段,只要任意一组满足「负责人为Simpson且对应项目结果为open」,就返回整行记录。写法同时兼容MS Access和SQL Server,复制后替换表名即可直接执行。

SELECT *
FROM 替换为你的实际表名
WHERE 
  -- ProjectA字段组判断
  (ProjectA_Responsible = 'Simpson' AND ProjectA_Result = 'open')
  OR
  -- ProjectB字段组判断
  (ProjectB_Responsible = 'Simpson' AND ProjectB_Result = 'open')
  -- 后续新增ProjectC、ProjectD等项目时,参照上面的格式追加OR判断块即可
  -- OR (ProjectC_Responsible = 'Simpson' AND ProjectC_Result = 'open')

针对给出的4条样例数据,上述SQL执行后会准确返回Part-ID为101、203的2条记录,完全匹配预期结果。

方案2:动态SQL(自动适配新增列,无需手动维护判断条件)

如果不想每次新增项目列都修改SQL,可以在SQL Server端创建存储过程,自动从系统表读取所有符合%_Responsible、%_Result命名规则的字段,动态拼接查询逻辑,Access前端直接调用存储过程即可,不需要额外写VBA拼接语句。
SQL Server端存储过程代码:

CREATE PROCEDURE GetSimpsonOpenRecords
AS
BEGIN
  DECLARE @sql NVARCHAR(MAX)
  DECLARE @tableName SYSNAME = N'替换为你的实际表名'
  DECLARE @condition NVARCHAR(MAX) = N''

  -- 自动拼接所有项目组的判断条件
  SELECT @condition = @condition + N'OR (' + QUOTENAME(r.name) + N' = ''Simpson'' AND ' + QUOTENAME(REPLACE(r.name, '_Responsible', '_Result')) + N' = ''open'') '
  FROM sys.columns r
  WHERE r.object_id = OBJECT_ID(@tableName)
    AND r.name LIKE '%_Responsible'
    -- 校验同项目对应的Result字段存在,避免字段缺失报错
    AND EXISTS (
      SELECT 1 FROM sys.columns res
      WHERE res.object_id = r.object_id
        AND res.name = REPLACE(r.name, '_Responsible', '_Result')
    )

  -- 去掉拼接字符串开头多余的OR
  SET @condition = STUFF(@condition, 1, 3, '')
  SET @sql = N'SELECT * FROM ' + QUOTENAME(@tableName) + N' WHERE ' + @condition

  EXEC sp_executesql @sql
END

调用时直接执行EXEC GetSimpsonOpenRecords即可,后续不管新增多少组ProjectX_Responsible/ProjectX_Result字段,存储过程都会自动识别匹配,不需要修改代码。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:31:13