Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Crear consulta MSSQL que agrupe los datos segun parametro

Estas en el tema de Crear consulta MSSQL que agrupe los datos segun parametro en el foro de Bases de Datos General en Foros del Web. Hola de ante manos gracias por permitirme formar parte de esta comunidad tan buena Mi problema consiste en crear una consulta que me devuelva la ...
  #1 (permalink)  
Antiguo 25/10/2011, 09:52
Avatar de rafaely2011  
Fecha de Ingreso: septiembre-2011
Ubicación: Sancti Spiritus
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
Crear consulta MSSQL que agrupe los datos segun parametro

Hola de ante manos gracias por permitirme formar parte de esta comunidad tan buena

Mi problema consiste en crear una consulta que me devuelva la cantidad de recorridos que ha realizado un agente por ruta yo cree una Procedimiento almacendado pero no logro que me lo de agrupado por agente y acantidad total por ruta

Código:
ALTER PROCEDURE [dbo].[ar_Graf]
@ruta numeric
AS

CREATE TABLE #temp
(
nombre varchar(50),
ruta numeric,
cantidad numeric

)

INSERT INTO #temp


SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idchofer) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idchofer = ar_Tripulaciones.id
GROUP BY ar_rutas.idchofer, ar_rutas.ruta, ar_Tripulaciones.nombre

UNION ALL

SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idjefe) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idjefe = ar_Tripulaciones.id
GROUP BY ar_rutas.idjefe, ar_rutas.ruta, ar_Tripulaciones.nombre

UNION ALL


SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idescolta) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idescolta = ar_Tripulaciones.id
GROUP BY ar_rutas.idescolta, ar_rutas.ruta, ar_Tripulaciones.nombre

UNION ALL


SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idcajero) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idcajero = ar_Tripulaciones.id
GROUP BY ar_rutas.idcajero, ar_rutas.ruta, ar_Tripulaciones.nombre


SELECT nombre, cantidad ,ruta
FROM #temp
WHERE ruta= @ruta
ORDER BY nombre
a por supesto la estructura de las tablas afectadas

Tabla ar_rutas donde estan los recorridos(rutas) realizados

Código:
CREATE TABLE [dbo].[ar_rutas](
	[codigo] [int] NOT NULL,
	[ruta] [int] NULL,
	[idchofer] [int] NULL,
	[idjefe] [int] NULL,
	[idescolta] [int] NULL,
	[idcajero] [int] NULL,
	[fecha] [datetime] NULL
) ON [PRIMARY]
Tabla ar_Tripulaciones que es donde estan los agentes

Código:
CREATE TABLE [dbo].[ar_Tripulaciones](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[nombre] [varchar](70) NULL,
	[cargo] [varchar](50) NULL,
	[activo] [int] NULL,
	[asignado] [int] NULL
) ON [PRIMARY]
hasta el momneto con lo que tengo creado me muestra

nombre | cantidad |
_________________
nombre 1| 5 |
nombre 1| 4 |
nombre 2| 1 |
nombre 2| 2 |

esto pasa porque cada agente puede haber echo un recorrido como cajero y los otros como chofer y por eso me lo pone separado y lo que quiero es mostrarlo todo total no importa como que lo haya echo

en si lo que quiero es que me muestra todos los nombres de los agentes y al lado la cantidad de veces que salio al recorido teniendo en cuenta el paramtro que yo le pase al SP por ejemplo @ruta = 1 pues entonces me muestre

nombre | cantidad |
_________________
nombre 1 | 5 |
nombre 2 | 2 |
nombre 3 | 1 |
  #2 (permalink)  
Antiguo 25/10/2011, 11:04
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Crear consulta MSSQL que agrupe los datos segun parametro

SELECT nombre, sum(cantidad) ,ruta
FROM #temp
WHERE ruta= @ruta
group by nombre,ruta
ORDER BY nombre


nombre | cantidad |
_________________
nombre 1 | 5 |
nombre 2 | 2 |
nombre 3 | 1 |

Aqui no entiendo como sacas el 5 si en esta tabla tiene por ejemplo el nombre 1 2 apariciones

nombre | cantidad |
_________________
nombre 1| 5 |
nombre 1| 4 |
nombre 2| 1 |
nombre 2| 2 |

con lo que el nombre1 tendria 9 en cantidad y el nombre2 3 no???
saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 25/10/2011, 15:06
Avatar de rafaely2011  
Fecha de Ingreso: septiembre-2011
Ubicación: Sancti Spiritus
Mensajes: 10
Antigüedad: 12 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Crear consulta MSSQL que agrupe los datos segun parametro

Libras de ante mano gracias por la prontitud de ayuda ya logre solucionarlo despues de un dia entero de intento logre modificar mi SP para lograr mostrar los datos quizas no es la mejor forma pero al final me dio lo que queria aqui esta para si quieres darme alguna sugerencia

SP final

Código:
ALTER PROCEDURE [dbo].[ar_Graf]
@ruta numeric
AS

INSERT INTO ar_temp

SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idchofer) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idchofer = ar_Tripulaciones.id
GROUP BY ar_rutas.idchofer, ar_rutas.ruta, ar_Tripulaciones.nombre

UNION ALL

SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idjefe) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idjefe = ar_Tripulaciones.id
GROUP BY ar_rutas.idjefe, ar_rutas.ruta, ar_Tripulaciones.nombre

UNION ALL


SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idescolta) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idescolta = ar_Tripulaciones.id
GROUP BY ar_rutas.idescolta, ar_rutas.ruta, ar_Tripulaciones.nombre

UNION ALL


SELECT     ar_Tripulaciones.nombre, ar_rutas.ruta, COUNT(ar_rutas.idcajero) AS cantidad
FROM         ar_rutas RIGHT OUTER JOIN
                      ar_Tripulaciones ON ar_rutas.idcajero = ar_Tripulaciones.id
GROUP BY ar_rutas.idcajero, ar_rutas.ruta, ar_Tripulaciones.nombre


CREATE TABLE #temp_ruta
(
nombre varchar(50),
cantidad numeric(18,0)
)

INSERT INTO #temp_ruta

SELECT nombre, SUM(cantidad) as cantidad
FROM ar_temp
WHERE ruta= @ruta
Group by nombre,cantidad
ORDER BY nombre

SELECT nombre, SUM(cantidad) as cantidad
from #temp_ruta
Group by nombre, cantidad
Gracias por toda su ayuda

Etiquetas: mssql, parametro, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:06.