Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql server 2008中的嵌套查询错误_Sql_Sql Server 2008 - Fatal编程技术网

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。但请注意。