2012-03-30 11 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

答えて

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テーブルは別名 –

+0

を必要とします。それは私に多くの助けを与えます..thnx –

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

+0

私は実際に結果のカウントを取得していません。 – Joshua

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

+1

それはちょうど作られた名前です、あなたはあなたが望むものをそれを呼び出すことができます。私はより良い名前は[MonitorRequestsWith5OrMoreMonitors]だと思います。 –

+1

+1の派生テーブルには別名が必要です –

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) mySubQuery /* Alias */ 
+0

+1の派生テーブルにはエイリアスが必要です –

関連する問題