cositas del Group By

Holas, bueno aqui en lineas comento una anecdota personal que me paso el dia de ayer y en realidad son "cositas" que nos olvidamos o no nos damos cuenta, pero lo coloco como observacion. Pues es conocido que la sentencia SQL : Group By pues sirve para agrupar las filas de salida de nuestro query.

Ahora bien mirando un ejemplo sencillo, para recordar, pues tenemos el resultado :

 

SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID

SalesOrderID SubTotal
------------ ---------------------------------------
43659        20565.620600
43660        1294.252900
43661        32726.478600
43662        28832.528900
43663        419.458900
43664        24432.608800
43665        14352.771300
43666        5056.489600

........

 

Aja!!! claro todo bonito y funciona!!! pero mmm ahora les cuento mi anecdota... estaba haciendo una consulta y con el Group By a una expresion,  de esta manera y obteniendo el siguiente resultado:

SELECT
    CONVERT(CHAR,DFECHA_CONTABLE,103) AS 'Fecha Contable',
    SUM(IMONTO) AS 'Gasto por Dia'
FROM
    GASTOS_DETALLE
GROUP BY
    DFECHA_CONTABLE
ORDER BY
    DFECHA_CONTABLE

 

Fecha Contable                 Gasto por Dia
------------------------------ ---------------------------------------
06/05/2008                     50.00
06/05/2008                     12.00
06/05/2008                     138.00
06/05/2008                     38.00
06/05/2008                     1200.00
07/05/2008                     38.00
07/05/2008                     100.00
07/05/2008                     10.00
07/05/2008                     5.00

(9 row(s) affected)

 

What??? oseaa??? y el agrupamiento???..., pues me di con la sorpresa que no lo estaba agrupando por el dia especifico, mmm pues y ahora?? bueno pues luego de navegar, pues me encontre con esta solucion bien logica por cierto :

SELECT
    CONVERT(CHAR,DFECHA_CONTABLE,103) AS 'Fecha Contable',
    SUM(IMONTO) AS 'Gasto por Dia'
FROM
    GASTOS_DETALLE
GROUP BY
    CONVERT(CHAR,DFECHA_CONTABLE,103)
ORDER BY
    CONVERT(CHAR,DFECHA_CONTABLE,103)


Fecha Contable                 Gasto por Dia
------------------------------ ---------------------------------------
06/05/2008                     1438.00
07/05/2008                     153.00

(2 row(s) affected)

 

Y pues en realidad habia logica en esto, pues si dado que el campo DFECHA_CONTABLE es de tipo Datetime, y por lo tanto tambien influyen la hora, minuto, segundo que fue grabado, y si hace el agrupamiento por el campo solo como lo coloque anteriormente no obtenia el resultado que queria, pues aqui la leccion del dia : al momento de usar una expresion, pues incluir esa misma expresion en la clausula Group By, y asunto resuelto.

Bytes!

Enlaces de Interes :

http://technet.microsoft.com/es-es/library/ms177673.aspx

0 comentarios:

 


« code name... Jonathan »