Empece este blog para guardar los descubrimientos en programacion que hago cuando tengo un error y por mas que busco en san Google, no encuentro nada hasta despues de horas de andar buscando y horas de prueba y error. Si a alguien algun dia le sirve, que bueno. En general es para mi porque se me olvidan muchos de estos descubrimientos.

Thursday, May 9, 2013

Haciendo un Case en un Count SQL

Odio hacer un query que me costo hacer y luego no acordarme como hacerlo.
Por alguna razon el haber pasado de SQL Server a Oracle me volvio perezosa con los queries. 
Odio que Oracle no tenga Top! Amaba mi top!

La vez pasada necesitaba hacer un query con unos counts especiales y google fue de muy poca ayuda. Eso me sorprendio considerando la cantidad de ejemplos de queries en la red. 
Este query sirve para cuando quieres hacer where distintos para cada count en una misma tabla. 
Los ejemplos que me daban eran Unions o joins pero yo queria algo simple y limpio.
He aqui el query que mi compaƱero me ayudo a sacar:

Supongamos que tengo un tabla en donde se almacenan diferentes estados. Digamos el estado de un producto donde estado = B es en bodega, T= en tienda, P=pendiente de ingresar a bodega. etc. Yo quiero saber el total de productos por cada estado. 
        select 
               idproducto, descripcionProducto,
               count(1) as totalProductos,
               count(case
                       when (estado != 'B') then
                        1
                     end) as bodega,
               count(case
                       when (estado != 'T') then
                        1
                     end) as enTienda,
               count(case
                       when (estado = 'P') then
                        1
                     end) as pendiente
          from productos
         group by Idproducto


Sencillo, rapido y bonito. 
Vi ejemplos de If en los parenthesis del count pero no les entendi mucho. Este case es lo mismo y mas comprensible. 
Bueno, al menos no se me va olvidar para la proxima! 

No comments:

Post a Comment