2011-12-05 41 views
5

bảng đặt hàng của tôi trông như thế này:SQL: Tính riêng biệt trong mệnh đề where?

id fk_customer 
1 34 
2 34 
3 34 
4 7 
5 7 
6 8 

Tôi muốn chỉ chọn những khách hàng có nhiều hơn 2 đơn đặt hàng.

doesnt làm việc này tuy nhiên:

SELECT * FROM order WHERE COUNT DISTINCT fk_customer > 2

Xin tư vấn!

nhờ

Trả lời

10

Cố gắng này:

SELECT fk_customer, COUNT(*) 
FROM dbo.[Order] 
GROUP BY fk_customer 
HAVING COUNT(*) > 2 

Order là một từ thuộc trong hầu hết các hệ thống cơ sở dữ liệu dựa trên SQL - sự lựa chọn tốt cho một tên bảng .... trong SQL Server, bạn cần phải đặt nó trong dấu ngoặc vuông để làm cho nó rõ ràng đó là một tên đối tượng (không phải là từ dành riêng) được sử dụng.

+0

Trong thực tế, bảng của tôi là sự kết hợp trái với ba bảng khác – jorrebor

+0

@ jorrebor: vâng - và vấn đề ở đâu? –

+0

xin lỗi tôi vẫn đang chỉnh sửa nhận xét đó. Tôi đã thử một số biến thể về những gì bạn đề xuất. Nhưng không có gì cho kết quả đúng, vui lòng xem bản chỉnh sửa sắp tới của tôi. – jorrebor

1

Hãy thử điều này

SELECT fk_customer FROM orders 
GROUP BY fk_customer 
HAVING COUNT(id) > 2 
0
SELECT fk_customer, COUNT(fk_customer) FROM [order] 
GROUP BY fk_customer HAVING COUNT(*) > 2 
1

Nếu bạn cố gắng sử dụng COUNT trong mệnh đề WHERE, SQL sẽ ném một ngoại lệ. Bạn chỉ có thể sử dụng hàm tổng hợp nếu nó nằm trong một truy vấn con chứa trong mệnh đề HAVING hoặc danh sách chọn.

SELECT fk_customer, COUNT(*)  
    FROM dbo.[Order] 
GROUP 
    BY fk_customer 
HAVING COUNT(*) > 2 
Các vấn đề liên quan