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

Ayuda con consulta

Estas en el tema de Ayuda con consulta en el foro de SQL Server en Foros del Web. Hola a todos: Estoy haciendo una consulta y me atore un poco...jejeje...ojala me puedan ayudar. Tengo 2 tablas Tabla Principal Id Descrip cantidad 1 Art ...
  #1 (permalink)  
Antiguo 16/03/2011, 16:07
 
Fecha de Ingreso: agosto-2007
Mensajes: 268
Antigüedad: 16 años, 8 meses
Puntos: 2
Ayuda con consulta

Hola a todos:

Estoy haciendo una consulta y me atore un poco...jejeje...ojala me puedan ayudar.

Tengo 2 tablas

Tabla Principal

Id Descrip cantidad
1 Art 1 20
2 Art 2 50

Tabla Secundaria
Id id_tabla_principal cantidad Estado
1 1 -10 Pendiente
2 1 -1 Pendiente
3 1 -2 Pendiente
4 1 -2 Confirmado
5 2 -2 Pendiente

Basicamente mi consulta consiste en poder sumar la cantidad de la tabla secundaria (-13) y restarselo a la cantidad de la tabla principal y solo aquellos registros que tengan su estado en pendiente. Lo que tengo es:

SELECT
tablaprincipal.Id,
(tablaprincipal.cantidad - CASE WHEN tablasecundaria.estado = 'CON' THEN 0 ELSE sum(tablasecundaria.cantidad)END) AS 'cantidad'
FROM tablaprincipal INNER JOIN tablasecundaria ON (tablaprincipal.id = tablasecundaria.id_rollo )
WHERE tablaprincipal.id = 1
group by tablaprincipal.Id, tablaprincipal.cantidad, tablasecundaria.estado
having (tablaprincipal.cantidad - CASE WHEN tablasecundaria.estado = 'CON' THEN 0 ELSE sum(tablasecundaria.cantidad)END) <> 0

Sin embargo me regresa lo siguiente

id cantidad
1 20
2 50
1 7
2 48

Yo solo quiero encontrar los ultimos 2 registros}

saludos...
  #2 (permalink)  
Antiguo 16/03/2011, 17:45
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 2 meses
Puntos: 96
Respuesta: Ayuda con consulta

Saludos

Pienso que el error lo tienes en el group by. No agrupes por la cantidad.
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 16/03/2011 a las 17:50
  #3 (permalink)  
Antiguo 17/03/2011, 08:04
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Ayuda con consulta

Hola yera2002:

La consulta que pones no ayuda en gran medida, pues estás aplicando condiciones diferentes a las que planteas en el problema y estás utilizando campos que no defines al inicio:

Código:
tablasecundaria.estado = 'CON' 
tablaprincipal.id = tablasecundaria.id_rollo 

Voy a partir de lo que entendí en la explicación de tu problema, si hay algo que esté mal lo comentas. Intenta con esto:

Código SQL:
Ver original
  1. DECLARE @TablaPrincipal TABLE (id INT, descrip VARCHAR(20), cantidad INT)
  2. INSERT INTO @TablaPrincipal VALUES (1, 'Art 1', 20)
  3. INSERT INTO @TablaPrincipal VALUES (2, 'Art 2', 50)
  4.  
  5. DECLARE @TablaSecundaria TABLE (id INT, id_tabla_principal INT, cantidad INT, estado VARCHAR(20))
  6. INSERT INTO @TablaSecundaria VALUES (1, 1, -10, 'Pendiente')
  7. INSERT INTO @TablaSecundaria VALUES (2, 1, -1, 'Pendiente')
  8. INSERT INTO @TablaSecundaria VALUES (3, 1, -2, 'Pendiente')
  9. INSERT INTO @TablaSecundaria VALUES (4, 1, -2, 'Confirmado')
  10. INSERT INTO @TablaSecundaria VALUES (5, 2, -2, 'Pendiente')
  11.  
  12. SELECT T1.descrip, T1.cantidad + T2.total_suma total  FROM @TablaPrincipal T1 INNER JOIN
  13. (
  14. SELECT id_tabla_principal, SUM(cantidad) total_suma FROM @TablaSecundaria
  15. WHERE estado = 'Pendiente' GROUP BY id_tabla_principal
  16. ) T2 ON T1.id = T2.id_tabla_principal

El resultado de esta consulta sería el siguiente:

Código:
descrip|total
--------------------------
Art 1|7
Art 2|48
Aquí estoy haciendo algunas consideraciones:
1. En la tabla Principal sólo aparece una vez cada artículo
2. En la tabla secundaria todas las cantidades aparecen con signo negativo.

Haz la prueba y nos comentas los resultados

Saludos
Leo.

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 13:48.