子查询返回的值超过1。当子查询跟随时,不允许这样做

时间:2016-04-12 03:45:46

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

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

  

Msg 512,Level 16,State 1,Line 1 Subquery返回的值超过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'  

3 个答案:

答案 0 :(得分:0)

试试这个......

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'

答案 1 :(得分:0)

只需添加group by,即可将相同的值分组

但请注意,在您的子查询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' 

答案 2 :(得分:-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
        --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'