2012-07-26 21 views
10

¿Cómo poner en práctica el 'significado' de la siguiente declaración pseudo-SQL:TSQL Conde 'Dónde' Condición

COUNT(distinct id where attribute1 > 0) 

En otras palabras, ¿cómo puedo hacer declaraciones condicionales de conteo, distintos?

Gracias!

Respuesta

27

Bueno, si puede filtrar toda la consulta, a continuación, LittleBobbyTables ya tiene the answer para usted. Si no, puede obtener esa columna de la siguiente manera:

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

Lo necesitaba como parte de una consulta. ¿Qué hay de malo en usarlo en una función agregada? – CodeKingPlusPlus

+0

+1, y recuerda correctamente: cuando se omite 'ELSE',' ELSE NULL' está implícito. En una nota diferente, realmente no entiendo esta "preocupación por el rendimiento" con respecto a la agregación condicional. Quiero decir, ¿cuáles son las alternativas a 'CASE' en una función agregada (por ejemplo, cuando su consulta necesita devolver el recuento condicional e incondicional)? –

+0

Veo, pero ya lo ha estipulado en su respuesta, por lo que su última declaración parece que alguien podría estar molesto con un * uso perfectamente legítimo de la agregación condicional. Solo quería dejar en claro si realmente lo quiso decir. Y, en general, estoy de acuerdo contigo en que esto * puede * ser abusado, como cualquier otra cosa. –

2

Más o menos, lo tenían:

SELECT COUNT(DISTINCT [ID]) AS DistinctID 
FROM YourTable 
WHERE attribute1 > 0