2012-07-26 31 views
10

Làm thế nào để thực hiện 'nghĩa' của báo cáo kết quả psuedo-SQL sau:TSQL Đếm 'ở đâu' Điều kiện

COUNT(distinct id where attribute1 > 0) 

Nói cách khác, làm thế nào để làm điều kiện, báo cáo đếm riêng biệt?

Cảm ơn!

Trả lời

27

Vâng, nếu bạn có thể lọc toàn bộ truy vấn, sau đó LittleBobbyTables đã có the answer cho bạn. Nếu không, bạn có thể lấy cột đó như vậy:

count(distinct case when attribute1 > 0 then id end) -- implicit null-else, iirc 
+0

Tôi cần nó như một phần của truy vấn. Điều gì là sai khi sử dụng nó trong một hàm tổng hợp? – CodeKingPlusPlus

+0

+1 và bạn nhớ chính xác: khi 'ELSE' bị bỏ qua,' ELSE NULL' được ngụ ý. Trên một lưu ý khác, tôi không thực sự hiểu điều này "mối quan tâm hiệu suất" đối với tổng hợp có điều kiện. Tôi có nghĩa là, những gì là lựa chọn thay thế cho 'CASE' trong một chức năng tổng hợp (ví dụ, khi truy vấn của bạn cần phải trả về cả hai điều kiện và vô điều kiện)? –

+0

Tôi thấy, nhưng bạn đã quy định rằng trong câu trả lời của bạn, do đó, tuyên bố cuối cùng của bạn có vẻ như ai đó có thể cảm thấy khó chịu với việc sử dụng tập hợp có điều kiện * hoàn toàn hợp pháp *. Tôi chỉ muốn nói rõ nếu bạn thực sự có ý đó. Và nói chung, tôi đồng ý với bạn rằng điều này * có thể * bị lạm dụng, giống như bất cứ điều gì khác. –

2

Bạn khá nhiều đã có nó:

SELECT COUNT(DISTINCT [ID]) AS DistinctID 
FROM YourTable 
WHERE attribute1 > 0 
Các vấn đề liên quan