sql server 2008中的嵌套查询错误
我得到以下错误sql server 2008中的嵌套查询错误,sql,sql-server-2008,Sql,Sql Server 2008,我得到以下错误 Msg 102, Level 15, State 1, Line 11 Incorrect syntax near ')'. 当我尝试运行以下查询时 SELECT COUNT(*) FROM tbl_usgGroupXref WHERE GroupID = 478 AND accountNo IN ( SELECT TOP 5000 accountNo FROM ( SELECT DI
Msg 102, Level 15, State 1, Line 11
Incorrect syntax near ')'.
当我尝试运行以下查询时
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT TOP 5000 accountNo
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
)
目前,我的查询由来自单个表的一系列嵌套查询组成tbl_usgGroupXref
。该表由每个账户的多个月记录组成。最内部的查询是获取不同的帐户。下一个外部查询是获取这些帐户中的任意5000个(我似乎无法将TOP
与DISTINCT
组合)。最外层的查询是获取5000个帐户所代表的实际记录的计数
是否有人能解释一下错误或修改此sql以使其正常工作?您必须将此子查询别名为:
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
) AS MySubQuery
还要注意的是,仅仅说
Top5000
并不能保证您将获得第一条记录。您必须将此子查询别名为:
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
) AS MySubQuery
还需要注意的是,仅仅说
Top5000
并不能保证您将获得第一条记录。您必须为大多数内部选择分配一个别名:
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT TOP 5000 accountNo
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
) ALIAS
)
或
结合顶部和独特的
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT DISTINCT TOP 5000 accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
您必须将别名指定给大多数内部选择:
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT TOP 5000 accountNo
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
) ALIAS
)
或
结合顶部和独特的
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT DISTINCT TOP 5000 accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
你也可以写:
SELECT TOP 5000 accountNo
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
作为:
您的整个查询如下:
SELECT SUM(cnt)
FROM
( SELECT TOP 5000
COUNT(*) AS cnt
FROM tbl_usgGroupXref
WHERE GroupID = 478
GROUP BY accountNo
) grp
你也可以写:
SELECT TOP 5000 accountNo
FROM (
SELECT DISTINCT accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
作为:
您的整个查询如下:
SELECT SUM(cnt)
FROM
( SELECT TOP 5000
COUNT(*) AS cnt
FROM tbl_usgGroupXref
WHERE GroupID = 478
GROUP BY accountNo
) grp
您不需要子查询如此复杂,因为IN将忽略重复项。不需要
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT TOP 5000 accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
但是,
TOP 5000
是没有意义的,因为您没有ORDER BY,所以您有5000个任意行。您不需要子查询如此复杂,因为IN将忽略重复项。不需要
SELECT COUNT(*)
FROM tbl_usgGroupXref
WHERE GroupID = 478
AND accountNo IN (
SELECT TOP 5000 accountNo
FROM tbl_usgGroupXref
WHERE GroupID = 478
)
但是,
TOP 5000
是没有意义的,因为您没有ORDER BY,所以您有5000行任意行。我相信您可以使用SELECT DISTINCT TOP 5000 accountNo
摆脱最里面的查询我相信您可以使用SELECT DISTINCT TOP 5000 accountNo
摆脱最里面的查询对不起,“第一个”是不精确的——我只是随机寻找5000个。但注意到了。对不起,“第一个”是不准确的-我只是随机寻找5000。但请注意。