2012-03-30 34 views
22

Tôi cần đếm số hàng được trả về bởi truy vấn sau.Đếm không có hàng nào được trả về bởi một truy vấn chọn

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 

Tôi đã thử với sau

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) 

Nó đưa ra một thông báo lỗi trong phân tích truy vấn mà nói như sau:

Msg 102, Level 15, State 1, Line 7 sai cú pháp gần ')'.

+1

Đã được xem là '@@ ROWCOUNT' chưa? – HABO

Trả lời

46

SQL Server yêu cầu truy vấn con mà bạn SELECT FROM hoặc JOIN để có một bí danh.

Thêm một bí danh để subquery của bạn (trong trường hợp này 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 bảng có nguồn gốc cần một bí danh –

+0

Nó giúp tôi rất nhiều ..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

Điều này sẽ cho anh ta một loạt các hàng với 'COUNT' cho nhóm, không phải là tổng số hàng được trả về. – JNK

+0

Tôi không nhận được kết quả thực sự. – Joshua

9

Hãy thử gói toàn bộ chọn của bạn trong dấu ngoặc đơn, sau đó chạy một count (*) trên đó

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

làm việc của nó now.Thanks. Tại sao bạn đã sử dụng myNewTable. – Joshua

+1

Nó chỉ là một tên được tạo sẵn, bạn có thể gọi nó là bất cứ điều gì bạn muốn. Tôi đoán một tên tốt hơn sẽ là [MonitorRequestsWith5OrMoreMonitors] –

+1

+1 bảng có nguồn gốc cần một bí danh –

5

Cú pháp lỗi chỉ là do bí danh bị thiếu cho truy vấn con:

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 bảng dẫn xuất cần có bí danh –

Các vấn đề liên quan