【问题标题】:Subquery returned more than 1 value. This is not permitted when the subquery follows子查询返回超过 1 个值。当子查询跟随时,这是不允许的
【发布时间】:2016-08-02 11:24:40
【问题描述】:

执行查询后,我收到以下错误:

消息 512,级别 16,状态 1,第 1 行子查询返回超过 1 个 价值。当子查询跟随 =, !=, 时,这是不允许的

、>= 或当子查询用作表达式时。

SELECT MAX(IL.INSLEND),n.ACTIONED, N.LEASID,n.BLDGID 
FROM note n 
INNER JOIN dbo.INSL il ON n.SEQNO=il.RECNUM 
INNER JOIN dbo.LEAS l ON l.BLDGID = n.BLDGID AND l.LEASID = n.LEASID
  AND n.REF1 = 'INSURAN' AND n.REF2= 'REMIND' OR n.ACTIONED <> 'C' 
  AND il.TABLEKEY = n.LEASID 
WHERE il.TABLEID='LEAS' AND il.TABLEKEY = L.LEASID 
GROUP BY n.LEASID, N.BLDGID, n.ACTIONED, IL.TABLEKEY, IL.TABLEID, L.LEASID
HAVING N.LEASID='083468' AND 
       (SELECT MAX(il.INSLEND) FROM dbo.INSL WHERE IL.TABLEKEY=L.LEASID AND IL.TABLEID='LEAS') < '2016-04-11'  

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2012


    【解决方案1】:

    试试这个...

    SELECT MAX(IL.INSLEND),n.ACTIONED, N.LEASID,n.BLDGID  FROM note n  INNER JOIN dbo.INSL il ON n.SEQNO=il.RECNUM  INNER JOIN dbo.LEAS l ON l.BLDGID = n.BLDGID AND l.LEASID = n.LEASID   AND n.REF1 = 'INSURAN' AND n.REF2= 'REMIND' OR n.ACTIONED <> 'C'    AND il.TABLEKEY = n.LEASID  WHERE il.TABLEID='LEAS' AND il.TABLEKEY = L.LEASID  GROUP BY n.LEASID, N.BLDGID, n.ACTIONED, IL.TABLEKEY, IL.TABLEID, L.LEASID HAVING N.LEASID='083468' AND MAX(il.INSLEND)< '2016-04-11'
    

    【讨论】:

    • 出现错误 列 'dbo.INSL.INSLEND' 在 HAVING 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
    • 我已编辑查询。而不是 Max(IL.INSLEND),只尝试 IL.INSLEND。
    • 仍然出现错误 列 'dbo.INSL.INSLEND' 在 HAVING 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。消息 8121,级别 16,状态 1,第 10 行列 'dbo.INSL.INSLEND' 在 HAVING 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中。
    • @DeepakJain,我可以知道编辑的查询满足您的要求.. 我的事情子查询条件本身满足主要条件.. 你可以试试这个。
    【解决方案2】:

    只需添加分组依据,分组相同的值

    但还要注意,在您的子查询 MAX(il.INSLEND) 中,您聚合的是 dbo.INSL il 的列,而不是子查询的列

    ( SELECT MAX(insl.INSLEND) 
      FROM dbo.INSL insl
      WHERE IL.TABLEKEY=L.LEASID AND IL.TABLEID='LEAS'
      GROUP BY (insl.INSLEND)
    ) < '2016-04-11' 
    

    【讨论】:

      【解决方案3】:

      试试这样的东西:

      SELECT MAX(IL.INSLEND),n.ACTIONED, N.LEASID,n.BLDGID 
      FROM note n 
      INNER JOIN dbo.INSL il ON n.SEQNO=il.RECNUM 
      INNER JOIN dbo.LEAS l ON l.BLDGID = n.BLDGID AND l.LEASID = n.LEASID
        AND n.REF1 = 'INSURAN' AND n.REF2= 'REMIND' OR n.ACTIONED <> 'C' 
        AND il.TABLEKEY = n.LEASID 
      WHERE il.TABLEID='LEAS' AND il.TABLEKEY = L.LEASID 
      GROUP BY n.LEASID, N.BLDGID, n.ACTIONED, IL.TABLEKEY, IL.TABLEID, L.LEASID
      HAVING N.LEASID='083468' AND
              --Use TOP 1. It should help you
             (SELECT TOP 1 MAX(il.INSLEND) FROM dbo.INSL WHERE IL.TABLEKEY=L.LEASID AND IL.TABLEID='LEAS') < '2016-04-11'  
      

      【讨论】:

      • 但我想要 inslend 在所有值中的最大值。但你使用的是前 1 名?/
      猜你喜欢
      • 2012-06-04
      • 2019-10-13
      • 1970-01-01
      • 2022-11-02
      • 2017-03-10
      相关资源
      最近更新 更多