2011-12-27 100 views
1

我收到以下错误嵌套查询错误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 DISTINCT accountNo 
       FROM tbl_usgGroupXref 
       WHERE GroupID = 478 
      ) 
     ) 

目前,我的查询由一系列从嵌套查询的单表tbl_usgGroupXref。该表由每个帐户的多个月记录组成。最内层的查询是获取不同的帐户。下一个外部查询是获得任何5000个这些帐户(我似乎无法合并TOPDISTINCT)。最外面的查询是获取由5000个账户表示的实际记录的计数。

任何人都可以澄清错误或修改这个SQL,以便它的工作?

+0

我相信你可以通过'SELECT DISTINCT TOP 5000 accountNo'摆脱最内层的查询 – bfavaretto 2011-12-27 13:52:32

回答

3

你有别名此子查询:

FROM (
    SELECT DISTINCT accountNo 
    FROM tbl_usgGroupXref 
    WHERE GroupID = 478 
) AS MySubQuery 

另外需要注意的,只是说TOP 5000没有任何保证你会得到第一记录。

+0

对不起,错过了编辑的正确答案 – 2011-12-27 13:53:18

2

你必须指定一个别名,以最内部的选择为:

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 
     ) 

OR

结合TOP和DISTINCT

SELECT COUNT(*) 
    FROM tbl_usgGroupXref 
WHERE GroupID = 478 
    AND accountNo IN (
      SELECT DISTINCT TOP 5000 accountNo 
      FROM tbl_usgGroupXref 
      WHERE GroupID = 478 
     ) 
1

你也可以这样写:

 SELECT TOP 5000 accountNo 
     FROM (
      SELECT DISTINCT accountNo 
      FROM tbl_usgGroupXref 
      WHERE GroupID = 478 
     ) 

为:

 SELECT TOP 5000 accountNo 
     FROM tbl_usgGroupXref 
     WHERE GroupID = 478 
     GROUP BY accountNo 

和你的整个查询为:

SELECT SUM(cnt) 
FROM 
    (SELECT TOP 5000 
      COUNT(*) AS cnt 
    FROM tbl_usgGroupXref 
    WHERE GroupID = 478 
    GROUP BY accountNo 
    ) grp 
3

你不需要的子查询这么复杂,因为在会忽略重复。 DISTINCT不是必需的。

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行随心所欲。

+0

对不起,'第一'不准确 - 我只是在找一个随机的5000.但是注意拍摄。 – stevenl 2011-12-27 14:24:51

+0

+1:不需要DISTINCT – edze 2011-12-27 14:26:05