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

Como Agrupar si hay muchos campos (columnas)???

Estas en el tema de Como Agrupar si hay muchos campos (columnas)??? en el foro de SQL Server en Foros del Web. Hola tengo una consulta en sql server que quisiera optimizar, ya que el proceso de agrupamiento lo hago desde mi codigo en VB, pero yo ...
  #1 (permalink)  
Antiguo 09/06/2008, 19:38
 
Fecha de Ingreso: enero-2005
Mensajes: 50
Antigüedad: 19 años, 4 meses
Puntos: 0
Como Agrupar si hay muchos campos (columnas)???

Hola tengo una consulta en sql server que quisiera optimizar, ya que el proceso de agrupamiento lo hago desde mi codigo en VB, pero yo siento que lo puedo hacer desde un stored procedure mas facil.

Bueno pongo un esquema para que se vea mas facil(espero)

Historial_Ventas
Id________Nombre_CantidadArt_Precio_Notas_CamposX1 .............X20 //aqui hay muchos campos mas de texto y numericos que necesito seleccionar

000001____Juan __10_____3.80_____Compra Correcta.................
000002____Pedro__5______5.50_____Nada............. ...............
// y bueno, donde Unidad.Codigo=ContenidoU.Codigo
.......

Cantidades
Id_____CantidadArt__Devueltos___DeMas ....................//hay mas campos de texto y numericos
000001_____4____________0___________0
000001_____2____________0___________0
000001_____4____________0___________0
000002_____2____________1___________0
000002_____3____________0___________0
.........

Quiero hacer una consulta que agrupe la columna codigo de la tabla Cantidades y que sume CantidadArt ya que esta suma debe ser igual al valor de CantidadArt de la Tabla Historial Ventas como se daran cuenta por decir el 0001 tiene 10 y la suma de la tabla cantidades da 10, ok entonces hago inner join y le pongo gruop by pero tambien necesito los otros campos de las 2 tablas(para otros procesos) pero si lo pongo asi no se puede porque dice que algunos campos text,ntext no estan contenidos en gruop by??

Código:
select * from Historial_Ventas
Inner Join Cantidades on
Historial_Ventas.id =Cantidades.Id
order by Historial_Ventas.id
Group by Historial_Ventas.id
  #2 (permalink)  
Antiguo 10/06/2008, 07:50
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 11 meses
Puntos: 1
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Cita:
ok entonces hago inner join y le pongo gruop by pero tambien necesito los otros campos de las 2 tablas(para otros procesos) pero si lo pongo asi no se puede porque dice que algunos campos text,ntext no estan contenidos en gruop by??
Cierto, el SQL es muy explicito en su respuesta, si te dice que necesitas agruparlos por los Demas campos (Campo1, Campo2, Campo3..... ) entocnes debes agruparlos...

Porque es necesario, porke el SQL no sabe que debe hacer con los demas campos que no pones en el "group by"... usualmente el group by se utiliza cuando en el SELECT colocas un: "sum()", "max()", etc etc... se tiene que agrupar por todos los campos que no se hacen estas operaciones

Aqui un ejemplo:
Cita:
Select ca.CodFact, ca.FechaFact, sum(de.Cantidad), ca.CodCliente
from Factura ca
inner join DetalleFactura de ON de.CodFactura = ca.CodFactura
where
ca.FechaFact between '2008/05/01' and '2008/05/31'
group by
ca.CodFactura, ca.FechaFact, ca.CodCliente
order by
ca.FechaFact
Espero te ayude, asi que tienes que poner en el group by todos los campos ke no le hagas un SUM(), o una MAX() o un MIN() etc etc. Saludos.
  #3 (permalink)  
Antiguo 10/06/2008, 09:52
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Que yo me acuerde, NO se puede agrupar (GROUP BY) por campos text, ntext
  #4 (permalink)  
Antiguo 16/06/2008, 23:32
 
Fecha de Ingreso: enero-2005
Mensajes: 50
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Ok bien ya e entendido el uso del group by, gracias.

Pero ahora una pregunta supongamos que obtengo una consulta con ciertos campos de un group by, a esos mismos registros devueltos por la consulta, le quiero agregar nuevos campos bajo x criterio se puede hacer esto???? no se si eso se llame tablas temporales?? para empesar a investigar, es decir unir dos o mas consultas sql para mostrarlas como si fuera 1 sola.
  #5 (permalink)  
Antiguo 17/06/2008, 11:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Revise la clausula UNION, solo que los campos devueltos en ambas consultas, debes ser iguales
  #6 (permalink)  
Antiguo 17/06/2008, 12:24
 
Fecha de Ingreso: enero-2005
Mensajes: 50
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Hola iislas mmm creo que no me explique bien en mi anterior comentario,lo explicare con el ejemplo de mi primer post por decir

tengo la tabla cantidades, digamos que le hago un groub by con Id, Sum (CantidadArt) as SumCantidadArt, Sum (Devueltos) as SumDevueltos, Sum (Demas) as SumDemas

Me quedaria asi

Id_____SumCantidadArt__SumDevueltos___SumDeMas
000001_____10____________0___________0
000002_____5_____________1___________0

Ya con esos datos quiero agregarle algunos campos de la otra tabla Historial ventas, para que quedara asi;

Id_____SumCantidadArt__SumDevueltos___SumDeMas _______Nombre__PrecioxU___Notas
000001_____10____________0___________0____________ ___Juan _______3.80_______Compra Correcta
000002_____5_____________1___________0____________ ___Pedro________5.50_______Nada

Eso es lo que no se como hacer, o de que manera seria la manera mas efectiva posible???
  #7 (permalink)  
Antiguo 17/06/2008, 12:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Bueno, entonces lo que deberia hacer es un JOIN del resultado de su primera consulta con la de la segunda consulta.

Supongo que ambas tablas se unen por algun campo en comun, cierto?
  #8 (permalink)  
Antiguo 17/06/2008, 12:36
 
Fecha de Ingreso: enero-2005
Mensajes: 50
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Asi es iislas, se unen por el campo id, asi suena logico hacerle un Join, pero eso es lo que no se como hacerlo despues de un resultado de una consulta, para generar un nuevo conjunto de datos?? si me captas??'
  #9 (permalink)  
Antiguo 17/06/2008, 17:38
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: Como Agrupar si hay muchos campos (columnas)???

Select T1.*, T2.Nombre, T2.Paterno, T2.Materno From Tabla1 T1 Join (select Id, Nombre, Paterno, Materno From Tabla2) As T2 On T1.id = T2.id
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 03:08.