我有以下SQL语句,它在SQL Server 2012中返回所需的结果:
YEAR SP IA
2006 Aglais io (Linnaeus, 1758) 82.32
2007 Aglais io (Linnaeus, 1758) 78.79
2008 Aglais io (Linnaeus, 1758) 79.29
2009 Aglais io (Linnaeus, 1758) 135.35
2010 Aglais io (Linnaeus, 1758) 81.82
2014 Aglais io (Linnaeus, 1758) 51.26
2001 Aglais io (Linnaeus, 1758) 0.00
2002 Aglais io (Linnaeus, 1758) 0.00
2003 Aglais io (Linnaeus, 1758) 0.00
2004 Aglais io (Linnaeus, 1758) 0.00
2005 Aglais io (Linnaeus, 1758) 0.00
2011 Aglais io (Linnaeus, 1758) 0.00
2012 Aglais io (Linnaeus, 1758) 0.00
2013 Aglais io (Linnaeus, 1758) 0.00
levels(DF) (original)
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014
levels(DF1) (subset)
2006 2007 2008 2009 2010 2014
levels(DF2) (recovered)
2006 2007 2008 2009 2010 2014 2001 2002 2003 2004 2005 2011 2012 2013
但是当我在MS Access 2007中运行相同的SQL语句时,我收到一个错误:
查询定义的SELECT列表中由'KODIKOS'引起的循环引用。
任何帮助都将不胜感激。
答案 0 :(得分:2)
正如汉斯的link所述:
计算字段的别名不能与用于计算字段的任何字段名称相同。
这可能相当令人讨厌(特别是如果它是查询返回的字段),但没有办法解决它。
所以你需要改变别名,例如:
SELECT
S.ONOMA
, S.DIEY
, S.POLH
, S.TK
, S.IDIOT
, S.KODIKOS
, S.AFM
FROM
SYNERG AS S
INNER JOIN
(SELECT
G.AFM, MIN(KODIKOS) AS MinKODIKOS
FROM SYNERG AS G
WHERE LEN(Nz(AFM, '')) <> 0
GROUP BY AFM) AS I ON S.KODIKOS = I.MinKODIKOS
ORDER BY
S.AFM
另请注意,Access中存在IsNull()
函数,但具有不同的含义(它需要一个参数并返回一个布尔值)。相应的函数是Nz()
并且(感谢@HansUp),不等运算符是<>
,而不是!=
。我总是在SQL Server中使用<>
,不需要使事情变得更复杂。 :)