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

Group by con select *

Estas en el tema de Group by con select * en el foro de SQL Server en Foros del Web. Buenas gente Necesitaria mostrar en un registro unos valores agrupados y acontinuación losregistros pertenecientes al registro que se este recorriendo. Es decir Sum(estados) + todos ...
  #1 (permalink)  
Antiguo 25/09/2014, 12:32
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Group by con select *

Buenas gente

Necesitaria mostrar en un registro unos valores agrupados y acontinuación losregistros pertenecientes al registro que se este recorriendo.

Es decir

Sum(estados) + todos los campos de la tabla que se encuentren en ese estado.
¿Cual sería la mejor forma intentando evitar subconsultas?
¿Con una union 1º sacando los agrupados y despues los registros de cada estado?

Muchas gracias por las aportaciones

Saludos
  #2 (permalink)  
Antiguo 25/09/2014, 12:48
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: Group by con select *

sin subconsultas no se puede, union es una subconsulta asi que contradice el primer punto.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 25/09/2014, 12:57
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Group by con select *

Ok, lo tratare de esa forma

gracias libras
  #4 (permalink)  
Antiguo 25/09/2014, 12:59
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Group by con select *

Realizando con un union,¿ en el bloque del UNION puedo hacer referencia al registro que esta fecheando en la consulta principal?
Si es asi un ejemplo me seria de mucha ayuda

Gracias!
  #5 (permalink)  
Antiguo 25/09/2014, 13:01
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: Group by con select *

porque sin subconsultas???? un ejemplo de tus datos podria ayudar
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 25/09/2014, 13:10
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Group by con select *

Si te digo la verdad no se si una subconsulta es mas bloqueante (a nivel de deadlocks) que una union... tuve malas experiencias en otros proyectos jeje.
Ok, subconsultas entonces.

tengo las tablas:
pedidos (IdPedido,Fecha,Importe,estadoPedido) y la tabla EstadoPedido(IdEstado,Descripcion,NombreDeEstado)
Oficina(IdOficina,)


queria sacar el sumatorio de pedidos para un idoficina en concreto y anidarle las columnas de cada pedido en el resultado de consulta
(Aprovecho y pregunto ¿Como puedo meter una tabla en el texto de los mensajes?)

Ejemplo resultado:

Estado TotalPedidos IdPedido Fecha IdOficina
20 10 1 2014/09/15 1
20 10 2 2014/09/15 1
30 5 2 2014/09/17

Espero que se entienda mas o menos

Muchas gracias por la ayuda
  #7 (permalink)  
Antiguo 25/09/2014, 13: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: Group by con select *

y como relaciono la oficina???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 25/09/2014, 13:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Group by con select *

Diculpa pedidos tinene com fk el idoficina y Oficina (IdOficina,codigoOficina,DirectorOficina)
  #9 (permalink)  
Antiguo 25/09/2014, 14:35
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: Group by con select *

y cual fecha dejarias para presentar? la maxima???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 25/09/2014, 14:49
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Group by con select *

la maxima de cada registro por ejemplo la idea es sacar el total por estado y acontinuacion todos los registros que pertenezcan a ese estado a continuacion en el resultado de la query
ya que esta consulta la voy a filtrar por estado=10 and idoficina=20 por ejemplo

Gracias libras
  #11 (permalink)  
Antiguo 25/09/2014, 15:06
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: Group by con select *

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2.  (
  3.  IdPedido INT IDENTITY (1,1),
  4.  Fecha datetime,
  5.  Importe INT,
  6.  estadoPedido INT,
  7.  idoficina INT)
  8.  
  9.  INSERT INTO #temp VALUES (getdate(),200,1,1)
  10.  INSERT INTO #temp VALUES (getdate(),100,1,1)
  11.  INSERT INTO #temp VALUES (getdate(),200,1,1)
  12.  INSERT INTO #temp VALUES (getdate(),200,2,1)
  13.  INSERT INTO #temp VALUES (getdate(),200,2,1)
  14.  INSERT INTO #temp VALUES (getdate(),200,1,2)
  15.  INSERT INTO #temp VALUES (getdate(),200,1,2)
  16.  
  17.  
  18.  CREATE TABLE #temp2
  19.  (
  20.  IdEstado INT,
  21.  Descripcion VARCHAR(200))
  22.  
  23.  INSERT INTO #temp2 VALUES (1,'Abierto')
  24.  INSERT INTO #temp2 VALUES (2,'Cerrado')
  25.  
  26.  CREATE TABLE #temp3
  27.  (
  28.  idoficina INT,
  29.  nombre VARCHAR(20)
  30.  )
  31.  
  32.  INSERT INTO #temp3 VALUES (1,'Oficina 1')
  33.  INSERT INTO #temp3 VALUES (2,'Oficina 2')
  34.  
  35.  SELECT DISTINCT t2.Descripcion,t4.total,t4.pedido,t4.fecha,t3.idoficina FROM #temp AS t1
  36.  LEFT JOIN #temp2 AS t2 ON (t1.estadoPedido=t2.IdEstado)
  37.  LEFT JOIN #temp3 AS t3 ON (t1.idoficina=t3.idoficina)
  38.  LEFT JOIN(
  39.  SELECT COUNT(estadopedido) AS total,idestado,MAX(fecha) AS fecha,MAX(IdPedido) AS pedido  FROM #temp AS t1
  40.  LEFT JOIN #temp2 AS t2 ON (t1.estadoPedido=t2.IdEstado)
  41.  LEFT JOIN #temp3 AS t3 ON (t1.idoficina=t3.idoficina)
  42.  GROUP BY estadoPedido,IdEstado) AS t4 ON (t1.estadoPedido=t4.IdEstado AND t1.Fecha=t4.fecha AND t1.IdPedido=t4.pedido)
  43.  WHERE t4.IdEstado IS NOT NULL

Descripcion total pedido fecha idoficina
Abierto 5 7 2014-09-25 15:36:53.643 2
Cerrado 2 5 2014-09-25 15:36:53.643 1


Aclarando, el id_pedido se tiene que filtrar o sacar el maximo, no puedes contar todos los registros de un estado y presentar todos los pedidos, otra cosa quien te dijo que los deadlocks son por subquerys?? sabes que es un subquery???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 25/09/2014, 15:25
 
Fecha de Ingreso: febrero-2011
Mensajes: 89
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Group by con select *

Muchas gracias Libras por tu tiempo esto me sirve perfecto.

Saludos.

Etiquetas: group, select, tabla, valor
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 06:25.