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

SQL多条件调用列报错:子查询返回多个值问题求助

问题解决与SQL实现

报错原因

你的子查询没有关联当前项目的ProjectID,也没限定只返回当前项目的结果,导致子查询返回了所有符合LIKE条件的多行数据。而作为表达式的子查询只能返回单个值,这就触发了Msg 512错误。

正确SQL写法

方法1:条件聚合(推荐,兼容多数场景)

利用CASE语句配合聚合函数,将同一项目的两类任务数据行转列:

SELECT
    p.Name AS ProjectName,
    MAX(CASE WHEN pt.Name LIKE '%PCA%' THEN pt.Name END) AS PCA_Name,
    MAX(CASE WHEN pt.Name LIKE '%PCA%' THEN pt.Time END) AS PCA_Time,
    MAX(CASE WHEN pt.Name LIKE '%PCO%' THEN pt.Name END) AS PCO_Name,
    MAX(CASE WHEN pt.Name LIKE '%PCO%' THEN pt.Time END) AS PCO_Time
FROM Projects p
JOIN Projecttasks pt ON p.GUID = pt.ProjectID
GROUP BY p.Name

注:因为每个项目仅对应1条PCA和1条PCO任务,用MAX/MIN都能准确提取到对应值。

方法2:多表关联(逻辑直观)

直接分别关联出每个项目的PCA和PCO任务表:

SELECT
    p.Name AS ProjectName,
    pca.Name AS PCA_Name,
    pca.Time AS PCA_Time,
    pco.Name AS PCO_Name,
    pco.Time AS PCO_Time
FROM Projects p
JOIN Projecttasks pca ON p.GUID = pca.ProjectID AND pca.Name LIKE '%PCA%'
JOIN Projecttasks pco ON p.GUID = pco.ProjectID AND pco.Name LIKE '%PCO%'

注:该方法要求每个项目必须同时存在PCA和PCO任务,否则会过滤掉缺失任务的项目。

原SQL的问题总结

  1. 子查询未关联主查询的ProjectID,导致返回全局符合条件的所有行;
  2. 基础JOIN会产生重复行(每个项目对应2条任务行),进一步放大了子查询的返回值冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:15:15