2011-04-24 14 views
7

que desea contar todas las filas que sólo tienen el valor que quiero de esta manera:SQL Seleccionar COUNT (Valor = Valor) ¿Posible?

SELECT Users.Balance, 
     Users.FreeBids, 
     COUNT(Bids.Burned = 0) AS 'ActiveBids', 
     COUNT(Bids.Burned = 1) AS 'BurnedBids' 
FROM Users 
     INNER JOIN Bids 
     ON Users.ID = Bids.BidderID 
WHERE Users.ID = 2 
GROUP BY Users.Balance, 
      Users.FreeBids 

dice "Invalid Syntax Neat '=' funciona perfectamente sin el '=' ¿Cómo puedo contar las filas que se quemó = 1. en ellos y quemado = 0 en ellos?

Gracias, Dan

Respuesta

17

Usar una declaración CASE

COUNT(CASE WHEN Bids.Burned=0 THEN 1 END) AS 'ActiveBids', 
COUNT(CASE WHEN Bids.Burned=1 THEN 1 END) AS 'BurnedBids' 

Hay un implícito ELSE NULL. COUNT solo cuenta NOT NULL valores por lo que esto le dará el resultado que necesita.

+0

Gracias hombre funciona como encanto :) ¿Algo más corto? lol – Danpe

+1

Prefiero usar SUM en este caso con un ELSE 0 en la sentencia case para eliminar la advertencia de "Valor nulo eliminado por agregado" que causa este código. –

+1

@Danpe - 'COUNT (NULLIF (Bids.Burned, 1))' y 'COUNT (NULLIF (Bids.Burned, 0))' si los únicos valores válidos en esa columna son '0,1' y posiblemente' NULL' . –