hola a todos, estoy tratando seleccionar las ventas del dia en Oracle pero no me funciona si trato de mostrar la suma por cada vendedor en la clausula grupo by
select T.nombreempleado from vendedor P JOIN cat_empleado T ON T.idempleado = P.empleado group by P.empleado
el problema esta al agregarle el group by y cuando quiero ver la suma por cada vendedor también me da problemas de esta forma
select T.nombreempleado, sum(P.monto)total from vendedor P JOIN cat_empleado T ON T.idempleado = P.empleado group by P.empleado
y por ultimo necesitaría filtrar por fecha
select T.nombreempleado sum(P.monto)total from vendedor P JOIN cat_empleado T ON T.idempleado = P.empleado where P.fecha = '09/11/2015' group by p.empleado
agradezco la orientancion que me puedan dar
Esto debería de funcionar.
SELECT T.nombreempleado, SUM(P.monto) AS total FROM vendedor AS P, cat_empleado AS T WHERE P.fecha='2015-11-09'
AND P.empleado=T.idempleado
GROUP BY P.empleado
Solo ten cuidado con el formato de la fecha, en mi consulta la estoy manejando como si fuera tipo DATE.
sigue con el error not group by expression
solo me funciona con este:
select empleado, sum(monto) as total from vendedor group by empleado;
aunque necesito mostrar el nombre del empleado
al final lo logre hacer funcionar, la regla es que en el group by deben ir todas las columnas a mostrar excepto la columna que sumará valores
select T.nombreempleado, sum(P.monto) as total
from vendedor P join cat_empleado T
on P.empleado = T.idempleado
where P.fecha = '09/11/2015'
group by T.nombreempleado order by total desc;
Cita de: d91 en 10 Noviembre 2015, 02:55 AM
al final lo logre hacer funcionar, la regla es que en el group by deben ir todas las columnas a mostrar excepto la columna que sumará valores
select T.nombreempleado, sum(P.monto) as total
from vendedor P join cat_empleado T
on P.empleado = T.idempleado
where P.fecha = '09/11/2015'
group by T.nombreempleado order by total desc;
Y si tienes dos empleados con diferente id (empleado) pero exactamente el mismo nombre?
yo pienso que primera hara la intersección
FROM vendedor P JOIN cat_empleado T
ON P.empleado = T.idempleado
SELECT * FROM cat_empleado;
+------------+-----------------+
| idempleado | nombreempleado |
+------------+-----------------+
| 1 | Juan Perez |
| 2 | Pilar Alcantara |
| 3 | Juan Perez |
+------------+-----------------+
SELECT * FROM vendedor;
+----------+-------+------------+
| empleado | monto | fecha |
+----------+-------+------------+
| 1 | 12.5 | 2015-11-09 |
| 1 | 15.2 | 2015-11-09 |
| 1 | 2.3 | 2015-11-08 |
| 2 | 5.1 | 2015-11-07 |
| 2 | 4.9 | 2015-11-09 |
| 3 | 3 | 2015-11-09 |
| 3 | 3 | 2015-11-09 |
+----------+-------+------------+
La consulta que propongo.
SELECT T.idempleado, T.nombreempleado, SUM(P.monto) AS total FROM vendedor AS P, cat_empleado AS T WHERE P.fecha='09/11/2015'
AND P.empleado=T.idempleado
GROUP BY T.idempleado;
+------------+-----------------+-------+
| idempleado | nombreempleado | total |
+------------+-----------------+-------+
| 1 | Juan Perez | 27.7 |
| 2 | Pilar Alcantara | 4.9 |
| 3 | Juan Perez | 6 |
+------------+-----------------+-------+
La consulta que propones.
SELECT T.nombreempleado, SUM(P.monto) AS total
FROM vendedor P JOIN cat_empleado T
ON P.empleado = T.idempleado
WHERE P.fecha = '09/11/2015'
GROUP BY T.nombreempleado ORDER BY total DESC;
+-----------------+-------+
| nombreempleado | total |
+-----------------+-------+
| Juan Perez | 33.7 |
| Pilar Alcantara | 4.9 |
+-----------------+-------+
Cita de: d91 en 10 Noviembre 2015, 02:32 AM
sigue con el error not group by expression
Qué SMBD usas?
Oracle 11g
bueno creo que la respuesta a la pregunta es: seleccionar el id de los empleados para que distinga por id
select t.id,t.nombre, sum(p.monto) as total
from vendedor p join empleado t on p.empleado = t.id
where p.fecha = sysdate
group by t.id, t.nombre order by total desc;