Estoy tratando de hacer algunos informes para los registros de tiempo de los empleados.
Tenemos dos tablas específicamente para esta pregunta. Los empleados se enumeran en la Members
tabla y cada día ingresan las entradas de tiempo del trabajo que han realizado y se almacenan en la Time_Entry
tabla.
Ejemplo de configuración con SQL Fiddle: http://sqlfiddle.com/#!3/e3806/7
El resultado final voy a es una tabla que muestra TODOS los Members
de una lista de columnas y luego mostrarán sus horas de suma de la fecha consultada en las otras columnas.
El problema parece ser que si no hay una fila en la Time_Entry
tabla para un miembro en particular, ahora hay una fila para ese miembro. He probado varios tipos de unión diferentes (izquierda, derecha, interior, exterior, exterior completo, etc.) pero ninguno parece darme lo que quiero, que sería (basado en el último ejemplo en SQL Fiddle):
/*** Desired End Result ***/
Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL
ADavis | 0 | 11-10-2013 | 0 | 0
BTronton | 0 | 11-10-2013 | 0 | 0
CJones | 0 | 11-10-2013 | 0 | 0
DSmith | 0 | 11-10-2013 | 0 | 0
EGirsch | 1 | 11-10-2013 | 0.92 | 1
FRowden | 0 | 11-10-2013 | 0 | 0
Lo que obtengo actualmente cuando consulto la fecha específica del 11-1:
Member_ID | COUNTTime_Entry | TIMEENTRYDATE | SUMHOURS_ACTUAL | SUMHOURS_BILL
EGirsch | 1 | 11-10-2013 | 0.92 | 1
Lo cual es correcto en función de la fila de entrada de tiempo con fecha 10-10-2013 para EGirsch, pero necesito ver ceros para los otros miembros para obtener informes y, finalmente, un tablero web / informe para esta información.
Esta es mi primera pregunta, y aunque busqué consultas de combinación, etc. Honestamente, no estoy seguro de cómo podría llamarse esta función, así que espero que esto no sea un duplicado y ayude a otros a tratar de encontrar una solución para problemas similares
fuente
WHERE
yAND
. Originalmente había usado alias, pero a sqlfiddle no parecía gustarle, así que solo tomé el formato completo. Gracias por los otros consejos SQL también. ¿RecomendaríaISNULL
oCOALESCE
hacer que los datos sean 0 en lugar deNULL
? ¡Gracias de nuevo!Cuando me he enfrentado a este tipo de problema en el pasado, he creado una tabla de "números" para ayudar a lidiar con las filas que faltan.
Creé mi tabla de números específicamente para tratar las fechas de la siguiente manera:
Esto crea una tabla con una sola fila para cada fecha entre 1900-01-01 y 2099-12-31. Solía
TOP(73049)
limitar el intervalo de fechas generado en mi ejemplo a esas fechas; si trabaja con un intervalo de fechas diferente, puede ajustar ese número.A continuación, agrego la
dDates
tabla a mi consulta para que se devuelva una fila para cada fecha en el rango deseado para cadamember_id
. El resultado se une a laTime_Entry
tabla como tal:Esto le permite especificar un rango de fechas para el informe.
Puede refinar aún más los resultados agregando
COALESCE(...)
ySUM(...)
según:Esto da como resultado la siguiente salida para sus datos de muestra:
fuente