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

Select con Group By parcial

Estas en el tema de Select con Group By parcial en el foro de SQL Server en Foros del Web. Hola que tal, tengo una duda sobre un SP que necesito armar y no me devuelve la informacion tal cual la necesito. Necesito listar todas ...
  #1 (permalink)  
Antiguo 18/01/2013, 09:15
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 16 años, 11 meses
Puntos: 2
Select con Group By parcial

Hola que tal, tengo una duda sobre un SP que necesito armar y no me devuelve la informacion tal cual la necesito. Necesito listar todas las cuentas de una empresa agrupando unicamente por cuenta la informacion que podran ver en la consulta. Esto no sucede porque me veo obligado a agrupar por otros campos (AC.DH y A.Fecha) cuando unicamente necesito que se agrupe por cuenta. Es decir, los datos que me devuelve son correctos, pero necesito que cada cuenta se muestre una sola vez y no varias veces como me esta pasando. ¿Es posible realizar una consulta asi? Aca les dejo la estructura de la tabla y la consulta.

Cuentas
Id (int pk)
Info (string)

Asientos
Id (int pk)
Fecha (datetime)

AsientoCuenta
AsientoId (int pk)
CuentaId (int pk)
Importe (float)
DH (string)

Código SQL:
Ver original
  1. DECLARE @EmpresaId INT = 88, @Desde datetime = '01/12/2013'
  2. SELECT c.id, C.Info,
  3. Debe = CASE WHEN AC.DH = 'D' AND A.Fecha < @Desde THEN isnull(SUM(ac.Importe),0) ELSE NULL END,
  4. Haber = CASE WHEN ac.DH = 'H' AND A.Fecha < @Desde THEN isnull(SUM(ac.Importe), 0) ELSE NULL END
  5. FROM Cuentas C
  6. LEFT JOIN AsientoCuenta AC ON C.Id = AC.CuentaId
  7. LEFT JOIN Asientos A ON A.Id = AC.AsientoId
  8. WHERE C.EmpresaId = @EmpresaId
  9. GROUP BY C.Id, C.Info, AC.DH, A.Fecha
  10. ORDER BY C.Info
  #2 (permalink)  
Antiguo 18/01/2013, 09:36
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: Select con Group By parcial

y si pones un ejemplo de tus datos ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 18/01/2013, 09:47
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Select con Group By parcial

Cita:
Iniciado por Libras Ver Mensaje
y si pones un ejemplo de tus datos ;)
Esta es una parte del listado, yo necesito que el registro 192 Productos se liste una sola vez con el Debe en 100 y el Haber en 220

Código SQL:
Ver original
  1. Id    Nombre       Debe  Haber
  2. 191 Listados       NULL NULL
  3. 192 Productos      100  NULL
  4. 192 Productos      NULL 100
  5. 192 Productos      NULL 120
  6. 193 Servicios      NULL NULL
  #4 (permalink)  
Antiguo 18/01/2013, 09:56
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: Select con Group By parcial

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id INT,
  4. producto VARCHAR(20),
  5. debe INT,
  6. haber INT
  7. )      
  8.  
  9. INSERT INTO #temp VALUES (191, 'Listados',  NULL ,NULL)
  10. INSERT INTO #temp VALUES (192, 'Productos',      100,  NULL)
  11. INSERT INTO #temp VALUES (192, 'Productos',      NULL, 100)
  12. INSERT INTO #temp VALUES (192, 'Productos',      NULL, 120)
  13. INSERT INTO #temp VALUES (193, 'Servicios',      NULL, NULL)       
  14.  
  15. SELECT id, producto,SUM(debe) AS debe,SUM(haber) AS haber FROM #temp GROUP BY id,producto

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: group, parcial, select, tabla, 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 05:33.