Hola buen día,
La consulta que deseas realizar es del tipo Cross-Tab,
Es correcto lo que menciona jdepaz, tuve un día un caso de estos que me hiciste recordar y por tanto espero esto te ayude:
Solución:
Select Fecha, [PA] As Palas, [BL] As Buldocer, [CA] As Camiones, [PA] + [BL] + [CA] As Total
From(
Select Fecha, Left(Maquina,2) As Maquina
From (
Select Distinct Fecha, Maquina As Maquina FROM partes
)As B
) As Resumen PIVOT (COUNT(Maquina) FOR Maquina IN ([PA],[BL],[CA])) As Pvt
Resultado:
Fecha Palas Buldocer Camiones Total
2012-01-02 2 0 0 2
2012-01-03 1 2 0 3
Te explico, espero darme a entender:
Este Select nos asegura que solo consideraremos una máquina para el día, así si existen más registros para una misma máquina en el mismo día, solo la tomaremos en cuenta 1 vez.
Select Distinct Fecha, Maquina As Maquina FROM partes
Ahora, la siguiente parte: dado que las maquinas las registramos por las 2 primeras letras y su numero, entonces:
Select Fecha, Left(Maquina,2) As Maquina
From (
Select Distinct Fecha, Maquina As Maquina FROM partes
)As B
El resultado sería, hasta aquí:
Fecha Maquina
2012-01-02 PA
2012-01-02 PA
2012-01-03 BL
2012-01-03 BL
2012-01-03 PA
Pero como requieres los resultados en modo Cross-Tab, requiere algo extra:
As Resumen PIVOT (COUNT(Maquina) FOR Maquina IN ([PA],[BL],[CA])) As Pvt
Nota que especificamos un conteo por máquina que ya previamente hemos agrupado por fecha en el query anterior, además notaras que he colocado: [PA],[BL],[CA], estas son las inciales de las máquinas, si lo cambios notarás que ya no las contará correctamente.
Existe una desventaja aún en este modelo, dado que si ingresas un equipo cuyas iniciales no esten en: [PA],[BL],[CA], no te las mostrará.
Espero te ayude esto, cualquier cosa no dudes en comentar.
Saludos