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

Agrupar query por una unica columna

Estas en el tema de Agrupar query por una unica columna en el foro de SQL Server en Foros del Web. Saludos Veran, tengo la siguiente query @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT TOP 100 tblCallEnd . CallListID ,             ...
  #1 (permalink)  
Antiguo 13/12/2013, 07:17
50l3r
Invitado
 
Mensajes: n/a
Puntos:
Agrupar query por una unica columna

Saludos

Veran, tengo la siguiente query

Código SQL:
Ver original
  1. SELECT TOP 100 tblCallEnd.CallListID,
  2.                tblCallList.CLI,
  3.                tblCallEnd.CreateDate,
  4.                tblCallEnd.IsLost,
  5.                tblCallEnd.SOLUCIONADO,
  6.                tblCallEnd.TIEMPO,
  7.                tblCallEnd.DestroyDate,
  8.                tblHuntGroup.Name AS grupo,
  9.                farmacia.farmacia AS farmacia,
  10.  
  11.   (SELECT SUM(DATEDIFF(SECOND, tbe.CreateDate, tbe.DestroyDate))
  12.    FROM tblCallEnd tbe
  13.    WHERE tbe.CallListID = tblCallEnd.CallListID
  14.      AND tbe.IEndFlag = 1
  15.    GROUP BY tbe.CallListID) AS TiempoTotal
  16. FROM tblCallEnd
  17. INNER JOIN tblCallList ON tblCallEnd.CallListID = tblCallList.CallListID
  18. LEFT OUTER JOIN tblHuntGroup ON tblCallEnd.hgid = tblHuntGroup.HGID
  19. LEFT OUTER JOIN farmacia ON farmacia.tfn = tblCallList.cli
  20. WHERE tblCallEnd.IsLost = 0
  21.   AND tblCallEnd.SOLUCIONADO IS NOT NULL
  22.   AND DATEPART(yy, tblCallEnd.TIEMPO) = '2013'
  23.   AND DATEPART(mm, tblCallEnd.TIEMPO) = '12'
  24.   AND DATEPART(dd, tblCallEnd.TIEMPO) = '10'
  25. GROUP BY tblCallEnd.CallListID
  26. ORDER BY tblCallEnd.TIEMPO DESC

Esta query, a pesar de darme el siguiente error:

La columna 'tblCallList.CLI' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY

Si elimino el group by, me saca una lista de registros de llamadas, pero necesito agrupar los resultados por la columna tblCallList.CallListID con el fin de que unicamente me muestre un registro por cada CallListID

Como puedo hacer esto en sql server?
  #2 (permalink)  
Antiguo 13/12/2013, 07:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Agrupar query por una unica columna

¿La columna tblCallList.CLI tiene con tblCallList.CallListID una relacion de 1:1 o de 1:N?
Si es 1:1, agrega esa columna al GROUP BY, si es 1:N, la deberás excluir. Y en todo caso obtennerla en una subconsulta de nivel superior.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/12/2013, 15:11
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Agrupar query por una unica columna

Como una regla general: todas las columnas que aparecen en la clausula Select
y no en la clausula Group By
deben obtener una funcion de agregado (Sum,Count,Max...).
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 16/12/2013, 02:29
50l3r
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Agrupar query por una unica columna

LA query es la siguiente

Código SQL:
Ver original
  1. SELECT *
  2. FROM
  3.   (SELECT tblCallEnd.CallListID,
  4.           tblCallList.CLI,
  5.           tblCallEnd.CreateDate,
  6.           tblCallEnd.IsLost,
  7.           tblCallEnd.SOLUCIONADO,
  8.           tblCallEnd.TIEMPO,
  9.           tblCallEnd.DestroyDate,
  10.           tblHuntGroup.Name AS grupo,
  11.           farmacia.farmacia AS farmacia,
  12.  
  13.      (SELECT SUM(DATEDIFF(SECOND,tbe.CreateDate,tbe.DestroyDate))
  14.       FROM tblCallEnd tbe
  15.       WHERE tbe.CallListID = tblCallEnd.CallListID
  16.         AND tbe.IEndFlag = 1
  17.       GROUP BY tbe.CallListID) AS TiempoTotal,
  18.           ROW_NUMBER() OVER (
  19.                              ORDER BY tblCallEnd.CallListID) AS rn
  20.    FROM tblCallEnd
  21.    INNER JOIN tblCallList ON tblCallList.CallListID = tblCallEnd.CallListID
  22.    LEFT OUTER JOIN tblHuntGroup ON tblCallEnd.hgid = tblHuntGroup.HGID
  23.    LEFT OUTER JOIN farmacia ON farmacia.tfn = tblCallList.cli
  24.    WHERE tblCallEnd.IsLost = 0
  25.      AND tblCallEnd.SOLUCIONADO IS NOT NULL
  26.      AND DATEPART(yy, tblCallEnd.TIEMPO) = '2013'
  27.      AND DATEPART(mm, tblCallEnd.TIEMPO) = '12'
  28.      AND DATEPART(dd, tblCallEnd.TIEMPO) = '13') AS sub
  29. WHERE rn > 0
  30.   AND rn <= 10
  31. GROUP BY sub.CallListID
  32. ORDER BY sub.TIEMPO,
  33.          sub.grupo DESC

Lo que ocurre es que en los demás campos no necesito ninguna función de agregado, mas que nada porque algunos campos son tipo texto y nose que funcion agregarles.

La relacion es 1:n
  #5 (permalink)  
Antiguo 16/12/2013, 11:21
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: Agrupar query por una unica columna

un ejemplo de tus datos y que necesitas ayudaria muchisimo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: agrupar, columna, join, query, registro, select, unica
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 02:09.