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

Consulta con subtotales

Estas en el tema de Consulta con subtotales en el foro de SQL Server en Foros del Web. Buenos días, Estoy dándole vueltas a una consulta que necesito sobre una bbdd. Tengo 3 tablas relacionadas: NS : codNS (PK), descripcion Esta tabla guarda ...
  #1 (permalink)  
Antiguo 08/01/2010, 07:02
 
Fecha de Ingreso: diciembre-2008
Mensajes: 16
Antigüedad: 15 años, 5 meses
Puntos: 0
Consulta con subtotales

Buenos días,

Estoy dándole vueltas a una consulta que necesito sobre una bbdd.

Tengo 3 tablas relacionadas:
NS: codNS (PK), descripcion
Esta tabla guarda el código y la información general de una NS

Acciones_NS_Parque: codNS (PK), cod_Parque (PK), AE_prev
Guarda los códigos de parque afectados por una NS y el número de AE previstos para ese parque

Acciones_NS_AE: codNS (PK), cod_Parque (PK), codAE (PK), idEstado
Guarda la información de cada AE en un parque y para una NS. Además muestra el estado de cada AE
La idea es sacar una consulta que muestre para una NS su código, su descripción, el número de máquinas realizadas (son las que se corresponden con el estado 11), y el total de máquinas previstas.

El código empleado para la consulta es el siguiente:

Código:
SELECT dbo.Acciones_NS_AE.codNS AS [Código NS], dbo.NS.descripcion AS [Descripción], 
	COUNT(dbo.Acciones_NS_AE.codNS) AS [Máquinas realizadas], SUM(dbo.Acciones_NS_Parque.AE_prev) AS [Máquinas totales previstas], 
FROM dbo.Acciones_NS_AE INNER JOIN dbo.NS ON dbo.Acciones_NS_AE.codNS = dbo.NS.codNS 
	INNER JOIN dbo.Acciones_NS_Parque ON dbo.Acciones_NS_AE.cod_Parque = dbo.Acciones_NS_Parque.cod_Parque 
	AND dbo.Acciones_NS_AE.codNS = dbo.Acciones_NS_Parque.codNS WHERE (dbo.Acciones_NS_AE.idEstado = '11') 
GROUP BY dbo.Acciones_NS_AE.codNS, dbo.Acciones_NS_Parque.AE_prev, dbo.NS.codNS, dbo.NS.descripcion
pero no está bien el número de Máquinas totales previstas. Si consulto esta cifra en la tabla Acciones_NS_Parque exclusivamente no tengo problema:

Código:
SELECT dbo.Acciones_NS_Parque.codNS, SUM(dbo.Acciones_NS_Parque.AE_prev)
FROM dbo.Acciones_NS_Parque
GROUP BY dbo.Acciones_NS_Parque.codNS
Sin embargo, no obtengo el mismo resultado al utilizar la intersección entre tablas.

Espero que tengan alguna sugerencia. Muchas gracias.
  #2 (permalink)  
Antiguo 08/01/2010, 11:31
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Consulta con subtotales

Si sale cuentas de menos, es porque no esta haciendo match en los inner joins que tienes con las otras tables..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 11/01/2010, 06:51
 
Fecha de Ingreso: diciembre-2008
Mensajes: 16
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Consulta con subtotales

Muy buenas de nuevo,

Lo que quería decir es que necesito obtener el resultado de la consulta
Código:
SELECT dbo.Acciones_NS_Parque.codNS, SUM(dbo.Acciones_NS_Parque.AE_prev)
FROM dbo.Acciones_NS_Parque
GROUP BY dbo.Acciones_NS_Parque.codNS
Sin embargo dentro de la consulta que tiene INNER JOIN me resulta imposible obtener este resultado. ¿Alguien sabe qué estoy haciendo mal? Imagino que tiene que ser posible.

Saludos.
  #4 (permalink)  
Antiguo 11/01/2010, 07:50
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Consulta con subtotales

intenta utilizando left joins para que tiempre traiga los registros de la tabla acciones_ns_parque..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Etiquetas: Ninguno
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 16:04.