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

Ayuda con precedure

Estas en el tema de Ayuda con precedure en el foro de SQL Server en Foros del Web. Saludos a todos los del foro pues aqui nuevamente pidiendo su apoyo, tengo un query que uso para sacr un reporte que me da comprobante ...
  #1 (permalink)  
Antiguo 03/11/2005, 10:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Ayuda con precedure

Saludos a todos los del foro pues aqui nuevamente pidiendo su apoyo, tengo un query que uso para sacr un reporte que me da
comprobante
no_envase
total_deposito
cuenta
nombre_cliente
bodega
b1000
b500
b200
b100
b50
b20
m100
m20
m10
m5
m2
m1
c50
c20
c10
c5
subtotal
diferencia
Me da todas esas columnas con este query

SELECT b.comprobante, b.num_envase, d.total_deposito, d.cuenta, b.nombre_cliente, '5234',
ISNULL(SUM(a.Importe_1000),0) as B1000,
ISNULL(SUM(a.Importe_500),0) AS B500,
ISNULL(SUM(a.Importe_200),0) AS B200,
ISNULL(SUM(a.Importe_100),0) AS B100,
ISNULL(SUM(a.Importe_50), 0) AS B50,
ISNULL(SUM(a.Importe_20), 0) AS B20,
ISNULL(SUM(c.Importe_100_e), 0)AS M100,
ISNULL(SUM(c.Importe_20_e), 0) AS M20,
ISNULL(SUM(c.Importe_10_e), 0) AS M10,
ISNULL(SUM(c.Importe_5_e), 0) AS M5,
ISNULL(SUM(c.Importe_2_e), 0) AS M2,
ISNULL(SUM(c.Importe_1_e), 0) AS M1,
ISNULL(SUM(c.Importe_50c_e), 0) AS C50,
ISNULL(SUM(c.Importe_20c_e), 0) AS C20,
ISNULL(SUM(c.Importe_10c_e), 0) AS C10,
ISNULL(SUM(c.Importe_05c_e), 0) AS C5,
ISNULL(SUM(a.Importe_1000 +
a.Importe_500 +
a.Importe_200 +
a.Importe_100 +
a.Importe_50 +
a.Importe_20 +
c.Importe_100_e+
c.Importe_20_e +
c.Importe_10_e +
c.Importe_5_e +
c.Importe_2_e +
c.Importe_1_e +
c.Importe_50c_e +
c.Importe_20c_e +
c.Importe_10c_e +
c.Importe_05c_e), 0) AS SUBTOTAL,
ISNULL(SUM(d.total_deposito -
(a.Importe_1000 +
a.Importe_500 +
a.Importe_200 +
a.Importe_100 +
a.Importe_50 +
a.Importe_20 +
c.Importe_100_e+
c.Importe_20_e +
c.Importe_10_e +
c.Importe_5_e +
c.Importe_2_e +
c.Importe_1_e +
c.Importe_50c_e +
c.Importe_20c_e +
c.Importe_10c_e +
c.Importe_05c_e)), 0) AS DIFERENCIA
FROM Proceso_Efectivo_global_Billete a, vproceso b, proceso_efectivo_global_moneda c, proceso_ficha_deposito d
where (a.Numero_Control = b.numero and (a.numero_control = c.numero_control) and (a.numero_control = d.numero_proceso))
and ((convert(varchar,b.fecha,103)= '15/10/2005 '
AND convert(varchar,b.hora_inicial,108) > '22:00:00')
or (convert(varchar,b.fecha,103)= '16/10/2005'
AND convert(varchar,b.hora_inicial,108) < '22:01:00'))
and b.clas_seccion = '16535'
and d.total_docto = 0
and d.tipo_moneda = 0

GROUP BY b.comprobante, b.num_envase, d.total_deposito, d.cuenta, b.nombre_cliente
order by b.nombre_cliente asc
GO


Pero tengo un problema como son mushocs los registro hay muchos cientes que se repiten, y lo que quiero es que me agrupe o concatene todos los clientes del mismo nombre en una sola fila claro con la suma de todos ellos al fina, lo he intentado con el group pero no me ha salido espero alguein me pueda orientar se los agradeceria
  #2 (permalink)  
Antiguo 03/11/2005, 10:19
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
si los quieres agrupados por cliente... solo especifica el campo del cliente... ya que en el group que escribes primero los agrupas por comprobante, numero de envase... etc... y al final el nombre...

pureba dejando solo el nombre de cliente...

Saludos!
  #3 (permalink)  
Antiguo 03/11/2005, 11:44
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
..

Cita:
Iniciado por Andres95
si los quieres agrupados por cliente... solo especifica el campo del cliente... ya que en el group que escribes primero los agrupas por comprobante, numero de envase... etc... y al final el nombre...

pureba dejando solo el nombre de cliente...

Saludos!

Gracias por contestar pero al quitar del group by los demas y solo de jar el nombre del cliente me envia el sigueinte error







Servidor: mensaje 8120, nivel 16, estado 1, línea 1
La columna 'b.Comprobante' 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.
Servidor: mensaje 8120, nivel 16, estado 1, línea 1
La columna 'b.Num_Envase' 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.
Servidor: mensaje 8120, nivel 16, estado 1, línea 1
La columna 'd.Total_Deposito' 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.
Servidor: mensaje 8120, nivel 16, estado 1, línea 1
La columna 'd.Cuenta' 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.
  #4 (permalink)  
Antiguo 03/11/2005, 12:10
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
ok no hay problema... ya que tu los quieres agrupados por cliente...osea un registro por cada cliente... ahora como esos datos varian en cada cliente tu no tienes que considerarlos ya que solo quieres el cliente con sus totales...
dicho esto...solo elimina esos campos... si es que no requieres operaciones sobre ellos...como es el caso de los importes...

ahora si los requieres tambien en el resultado, ya no seria cierta la primera cuestion (agrupados por clientes) entonces solo seria que definieras el orden de la agrupacion... por ejemplo [ group by cliente, comprobante ] te daria en el resultado tantos registros como comprobantes diferentes halla por cada cliente...

cliente comprobante totales
1 1 (total de cliente 1 con comprobante 1)
1 2 (total de cliente 1 con comprobante 2)
1 3 (total de cliente 1 con comprobante 3)
2 1 (total de cliente 2 con comprobante 1)
2 2 (total de cliente 1 con comprobante 2)
...
  #5 (permalink)  
Antiguo 03/11/2005, 12:15
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
..

Cita:
Iniciado por Andres95
ok no hay problema... ya que tu los quieres agrupados por cliente...osea un registro por cada cliente... ahora como esos datos varian en cada cliente tu no tienes que considerarlos ya que solo quieres el cliente con sus totales...
dicho esto...solo elimina esos campos... si es que no requieres operaciones sobre ellos...como es el caso de los importes...

ahora si los requieres tambien en el resultado, ya no seria cierta la primera cuestion (agrupados por clientes) entonces solo seria que definieras el orden de la agrupacion... por ejemplo [ group by cliente, comprobante ] te daria en el resultado tantos registros como comprobantes diferentes halla por cada cliente...

cliente comprobante totales
1 1 (total de cliente 1 con comprobante 1)
1 2 (total de cliente 1 con comprobante 2)
1 3 (total de cliente 1 con comprobante 3)
2 1 (total de cliente 2 con comprobante 1)
2 2 (total de cliente 1 con comprobante 2)
...

Ok ya lo modifique y quitando los que me dice el error ya me los agrupa el query quedo asi



SELECT b.nombre_cliente,
d.total_deposito, d.cuenta, '5234',
ISNULL(SUM(a.Importe_1000),0) as B1000,
ISNULL(SUM(a.Importe_500),0) AS B500,
ISNULL(SUM(a.Importe_200),0) AS B200,
ISNULL(SUM(a.Importe_100),0) AS B100,
ISNULL(SUM(a.Importe_50), 0) AS B50,
ISNULL(SUM(a.Importe_20), 0) AS B20,
ISNULL(SUM(c.Importe_100_e), 0)AS M100,
ISNULL(SUM(c.Importe_20_e), 0) AS M20,
ISNULL(SUM(c.Importe_10_e), 0) AS M10,
ISNULL(SUM(c.Importe_5_e), 0) AS M5,
ISNULL(SUM(c.Importe_2_e), 0) AS M2,
ISNULL(SUM(c.Importe_1_e), 0) AS M1,
ISNULL(SUM(c.Importe_50c_e), 0) AS C50,
ISNULL(SUM(c.Importe_20c_e), 0) AS C20,
ISNULL(SUM(c.Importe_10c_e), 0) AS C10,
ISNULL(SUM(c.Importe_05c_e), 0) AS C5,
ISNULL(SUM(a.Importe_1000 +
a.Importe_500 +
a.Importe_200 +
a.Importe_100 +
a.Importe_50 +
a.Importe_20 +
c.Importe_100_e+
c.Importe_20_e +
c.Importe_10_e +
c.Importe_5_e +
c.Importe_2_e +
c.Importe_1_e +
c.Importe_50c_e +
c.Importe_20c_e +
c.Importe_10c_e +
c.Importe_05c_e), 0) AS SUBTOTAL,
ISNULL(SUM(d.total_deposito -
(a.Importe_1000 +
a.Importe_500 +
a.Importe_200 +
a.Importe_100 +
a.Importe_50 +
a.Importe_20 +
c.Importe_100_e+
c.Importe_20_e +
c.Importe_10_e +
c.Importe_5_e +
c.Importe_2_e +
c.Importe_1_e +
c.Importe_50c_e +
c.Importe_20c_e +
c.Importe_10c_e +
c.Importe_05c_e)), 0) AS DIFERENCIA

FROM Proceso_Efectivo_global_Billete a, vproceso b, proceso_efectivo_global_moneda c, proceso_ficha_deposito d
where (a.Numero_Control = b.numero and (a.numero_control = c.numero_control) and (a.numero_control = d.numero_proceso))
and ((convert(varchar,b.fecha,103)= '15/10/2005 '
AND convert(varchar,b.hora_inicial,108) > '22:00:00')
or (convert(varchar,b.fecha,103)= '16/10/2005'
AND convert(varchar,b.hora_inicial,108) < '22:01:00'))
and b.clas_seccion = '16535'
and d.total_docto = 0
and d.tipo_moneda = 0

GROUP BY b.nombre_cliente
order by b.nombre_cliente asc
GO




Pero como hago para que me muestre esos registros que suprimir que fueron

num_envase,
total_deposito,
d.cuenta,



pues ahora no me da esos registros en la consulta
  #6 (permalink)  
Antiguo 03/11/2005, 12:23
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
bueno brother eso es lo que te comentaba en el mensaje anterior....
*** no te los ha suprimido... los ha agrupado por cliente ****

ahora si tambien los requieres debes incluirlos en la clausula group by....

algo como esto...

b.nombre_cliente,b.comprobante, b.num_envase, d.total_deposito, d.cuenta

solo que toma en cuenta que se va a generar un nuevo registro cada que una de las columnas cambie...

es decir si todas estas columnas son iguales... solo regresa un registro.
si cambia el nombre... genera un nuevo registro..
si cambia el comprobante aunque el nombre sea igual, genera un nuevo registro...

y asi sucesivamente hasta el el campo cuenta...

Saludos!
  #7 (permalink)  
Antiguo 03/11/2005, 12:29
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Cita:
Iniciado por Andres95
bueno brother eso es lo que te comentaba en el mensaje anterior....
*** no te los ha suprimido... los ha agrupado por cliente ****

ahora si tambien los requieres debes incluirlos en la clausula group by....

algo como esto...

b.nombre_cliente,b.comprobante, b.num_envase, d.total_deposito, d.cuenta

solo que toma en cuenta que se va a generar un nuevo registro cada que una de las columnas cambie...

es decir si todas estas columnas son iguales... solo regresa un registro.
si cambia el nombre... genera un nuevo registro..
si cambia el comprobante aunque el nombre sea igual, genera un nuevo registro...

y asi sucesivamente hasta el el campo cuenta...

Saludos!
Ok bueno el problema era ese que si en el group by coloco

b.nombre_cliente,
b.comprobante, b.num_envase,
d.total_deposito,
d.cuenta

entonces ya no agrupa o concatena por cliente me empieza a color otra vez muchos clientes con el mismo nombre no existe alguna forma de agregar esas registros sin etner que colocarlos en el group by
  #8 (permalink)  
Antiguo 03/11/2005, 12:39
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
bueno si los agrupa...solo que por los campos que listaste...

entonces, lo mejor es que manejes esa presentacion en tu informe....


es decir, en la herramienta que estas utilizando para hacer el reporte.

no se cual es la herramienta, pero debe tener una opcion en la que te diga "Agrupar por" y ahi le das el nombre del cliente... esto no es lo mismo que agruparlo en sql... lo que hacen ahi es simplemente que mientras no cambie el cliente no lo vuelve a desplegar....seria algo como....

Código:
Cliente   ticket pago
Uno        1       1000
             2        2000
             4       5000

DOS        5        58900
              7       78888
              8       10000

si el reporte lo estas haciendo a mano solo valida eso... que solo cuando el cliente cambie lo vuelves a desplegar...

supongo que es lo mas sencillo, ya que sino lo que pides es cambiar los renglones a columnas y requiririas de un curso o algo asi... con lo que te complicarias mas...ya que no sabrias a ciencia cierta cuan largo seria el registro (osea cuantas columnas tendria).
  #9 (permalink)  
Antiguo 03/11/2005, 12:54
 
Fecha de Ingreso: diciembre-2003
Mensajes: 595
Antigüedad: 20 años, 4 meses
Puntos: 1
Cita:
Iniciado por Andres95
bueno si los agrupa...solo que por los campos que listaste...

entonces, lo mejor es que manejes esa presentacion en tu informe....


es decir, en la herramienta que estas utilizando para hacer el reporte.

no se cual es la herramienta, pero debe tener una opcion en la que te diga "Agrupar por" y ahi le das el nombre del cliente... esto no es lo mismo que agruparlo en sql... lo que hacen ahi es simplemente que mientras no cambie el cliente no lo vuelve a desplegar....seria algo como....

Código:
Cliente   ticket pago
Uno        1       1000
             2        2000
             4       5000

DOS        5        58900
              7       78888
              8       10000

si el reporte lo estas haciendo a mano solo valida eso... que solo cuando el cliente cambie lo vuelves a desplegar...

supongo que es lo mas sencillo, ya que sino lo que pides es cambiar los renglones a columnas y requiririas de un curso o algo asi... con lo que te complicarias mas...ya que no sabrias a ciencia cierta cuan largo seria el registro (osea cuantas columnas tendria).



Ok mira el reporte tal cual cuando lo ejecuto, lo importo tal cual a un archivo excel, por medio de vb6, asi solo tomo las columnas que te mencionaba,y ya a comodado el query por cliente lo unico que me hace falta es agregar esos registros
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 07:31.