2012-03-30 86 views
22

我需要計算以下查詢返回的行數。計算select查詢返回的行數

select m.Company_id 
from Monitor as m 
    inner join Monitor_Request as mr on mr.Company_ID=m.Company_id 
    group by m.Company_id 
    having COUNT(m.Monitor_id)>=5 

我試圖與以下

select COUNT(*) from 
(
select m.Company_id 
from Monitor as m 
    inner join Monitor_Request as mr on mr.Company_ID=m.Company_id 
    group by m.Company_id 
    having COUNT(m.Monitor_id)>=5) 

它給在查詢分析器的錯誤消息,其表示如下:

消息102,級別15,狀態1,行7不正確的語法靠近')'。

+1

是否考慮過@@ ROWCOUNT? – HABO 2012-03-30 15:43:14

回答

46

SQL Server要求的子查詢,你SELECT FROMJOIN有一個別名。

一個別名添加到您的子查詢(在這種情況下x):

select COUNT(*) from 
(
select m.Company_id 
from Monitor as m 
    inner join Monitor_Request as mr on mr.Company_ID=m.Company_id 
    group by m.Company_id 
    having COUNT(m.Monitor_id)>=5) x 
+1

+1派生表需要一個別名 – 2012-03-30 15:26:09

+0

它幫助我很多..thnx – 2015-07-03 17:01:13

0
select COUNT(*) 
from Monitor as m 
    inner join Monitor_Request as mr on mr.Company_ID=m.Company_id 
    group by m.Company_id 
    having COUNT(m.Monitor_id)>=5 
+2

這會給他一堆用'COUNT'分組的行,而不是返回的總行數。 – JNK 2012-03-30 15:19:06

+0

我沒有得到實際結果的數量。 – Joshua 2012-03-30 15:19:16

9

嘗試包裹整個選擇括號,然後在該

select count(*) 
from 
(
    select m.id 
    from Monitor as m 
    inner join Monitor_Request as mr 
     on mr.Company_ID=m.Company_id group by m.Company_id 
    having COUNT(m.Monitor_id)>=5 
) myNewTable 
+0

它的工作現在。謝謝。爲什麼你使用myNewTable。 – Joshua 2012-03-30 15:21:23

+1

這只是一個製作的名字,你可以隨心所欲地調用它。我想一個更好的名字是[MonitorRequestsWith5OrMoreMonitors] – 2012-03-30 15:26:46

+1

+1派生表需要一個別名 – 2012-03-30 15:27:25

5

語法運行COUNT(*)錯誤只是由於子查詢缺少別名:

select COUNT(*) from 
(
select m.Company_id 
from Monitor as m 
    inner join Monitor_Request as mr on mr.Company_ID=m.Company_id 
    group by m.Company_id 
    having COUNT(m.Monitor_id)>=5) mySubQuery /* Alias */ 
+0

+1派生表需要一個別名 – 2012-03-30 15:28:23