2011-12-27 95 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