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

Select Union con Group By

Estas en el tema de Select Union con Group By en el foro de SQL Server en Foros del Web. Hola amigos que cuentan, yo estoy algo complicado intentando armar una query y quizas me puedan dar una mano. Tengo una sola tabla: Compras con ...
  #1 (permalink)  
Antiguo 22/06/2012, 11:33
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 5 meses
Puntos: 2
Select Union con Group By

Hola amigos que cuentan, yo estoy algo complicado intentando armar una query y quizas me puedan dar una mano. Tengo una sola tabla: Compras con los campos: Id, Fecha, Tasa1, Tasa2, Neto1, Neto2. El valor de la tasa suele repetirse, por lo general se utilizan 4 o 5 valores. Necesito crear un select para obtener la sumatoria de netos para determinada Tasa. Es decir, unificar los valores iguales de Tasa1 y Tasa2 y obtener la sumatoria de netos para cada valor. El reporte quedaria algo asi:

Tasa Neto
0,00 200
10,50 490
21,00 350
27,00 615

Esta es la query que estoy armando
Código:
ALTER PROCEDURE dbo.prueba
(@EmpresaId int, @Desde datetime, @Hasta datetime)
As
Select Distinct Tasa1, Sum(Neto1) From Compras
Where (Tasa1 is not null) And (Fecha Between @Desde And @Hasta) And (EmpresaId = @EmpresaId)
Group By Tasa1
Union
Select Distinct Tasa2, Sum(Neto2) From Compras
Where (Tasa2 is not null) And (Fecha Between @Desde And @Hasta) And (EmpresaId = @EmpresaId)
Group By Tasa2
El problema que estoy teniendo es que al agregar el Sum(Neto) me duplica los valores de Tasa, cosa que al consultar unicamente la Tasa no ocurria. Espero me puedan dar una mano, saludos...
  #2 (permalink)  
Antiguo 26/06/2012, 11:29
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: Select Union con Group By

Hola que tal, todavia sigo complicado con esto, el problema es que no me funciona la union ya que me devuelve el valor sumado de cada Tasa por separado. Voy a simplificar un poco para que se entienda mejor ya que la clausula Where no viene al caso. El código en cuestion es:
Código:
Select Distinct Tasa1, Sum(Neto1+Neto2) From Compras
Where (Tasa1 is not null)
Group By Tasa1
Union
Select Distinct Tasa2, Sum(Neto1+Neto2) From Compras
Where (Tasa2 is not null)
Group By Tasa2
La tabla se llama Compras y tiene los campos:
Id, Tasa1, Tasa2, Neto1, Neto2, Iva1, Iva2

Me devuelve:
Código:
Tasa1                         Column1
10,5                           500
10,5                           200
21                             800
21                             400
22                             50
27                             1100
27                             2000
Yo necesito que me devuelva
Código:
Tasa                           Neto
10,5                           700
21                             1200
22                             50
27                             3100
Es decir que me agrupe para un determinado valor de Tasa la sumatoria de todos los netos (Neto1 y Neto2). Espero me puedan dar una mano, saludos...
  #3 (permalink)  
Antiguo 26/06/2012, 14:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Select Union con Group By

Prueba de esta forma:

Código SQL:
Ver original
  1. SELECT Tasa, SUM(Importe)
  2. FROM (
  3. SELECT DISTINCT [Tasa1] AS Tasa, SUM(Neto1+Neto2) AS Importe FROM Compras
  4. WHERE (Tasa1 IS NOT NULL)
  5. GROUP BY Tasa1
  6. UNION
  7. SELECT DISTINCT [Tasa2] AS Tasa, SUM(Neto1+Neto2) AS Importe  FROM Compras
  8. WHERE (Tasa2 IS NOT NULL)
  9. GROUP BY Tasa2)
  10. GROUP BY Tasa
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 27/06/2012, 13:31
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: Select Union con Group By

Hola iislas, gracias por responder. Algo parecido había encontrado googleando y no lo había podido adaptar. La idea esta muy buena porque englobas todo a partir de Tasa e Importe. Vos sabes que no me funcionó en su momento y ahora tampoco, me da el error: "Sintaxis incorrecta cerca de la palabra clave Group". Ya llevo varios días renegando con esta consulta, me parece que voy a optar por crear un dataset con dos consultas porque ya no se me ocurre que más hacer. Saludos y gracias...

Huasi
  #5 (permalink)  
Antiguo 27/06/2012, 14:23
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Select Union con Group By

y si haces esto:

Código SQL:
Ver original
  1. SELECT Tasa, SUM(Importe)
  2.     FROM (
  3.     SELECT DISTINCT [Tasa1] AS Tasa, SUM(Neto1+Neto2) AS Importe FROM Compras
  4.     WHERE (Tasa1 IS NOT NULL)
  5.     GROUP BY Tasa1
  6.     UNION
  7.     SELECT DISTINCT [Tasa2] AS Tasa, SUM(Neto1+Neto2) AS Importe  FROM Compras
  8.     WHERE (Tasa2 IS NOT NULL)
  9.     GROUP BY Tasa2) AS t1
  10.     GROUP BY Tasa

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 28/06/2012, 08:34
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 5 meses
Puntos: 2
Respuesta: Select Union con Group By

Funcionó!!! Muchas gracias iislas y Libras.

Etiquetas: group, select, tabla, union, campos
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 04:27.