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

SQL Query pregunta

Estas en el tema de SQL Query pregunta en el foro de Bases de Datos General en Foros del Web. Hola tengo un problema con una tabla que tiene los siguientes campos. a | b | c | monto 00 | 001 | 0001 | ...
  #1 (permalink)  
Antiguo 02/08/2010, 22:44
pompeighu
Invitado
 
Mensajes: n/a
Puntos:
SQL Query pregunta

Hola tengo un problema con una tabla que tiene los siguientes campos.

a | b | c | monto

00 | 001 | 0001 | 50
00 | 002 | 0002 | 20
00 | 002 | 0002 | 5
00 | 003 | 0003 | 20
00 | 003 | 0003 | 50
00 | 003 | 0003 | 10
00 | 003 | 0003 | 80

Como hago una query para que me devuelva lo siguiente:

a | b | c | #Reg | "Suma Montos"

00 | 001 | 0001 | 1 | 50
00 | 002 | 0002 | 2 | 25
00 | 003 | 0003 | 4 | 160

donde # reg es el numero de veces que existe la clave a | b | c.

trato con una query así

select a,b,c, count(c), sum(monto) from tabla group by a,b,c

Pero no me sale. Me podrian dar algunas opciones de cómo podría hacer esto?
  #2 (permalink)  
Antiguo 03/08/2010, 00:33
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: SQL Query pregunta

Buenos días,


select a,b,c, count(a||b||c) as reg, sum(monto) from tabla group by a,b,c order by reg


Un saludo y buen día.
  #3 (permalink)  
Antiguo 03/08/2010, 07:08
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SQL Query pregunta

Buena respuesta ioel10 (karma por esa )

Yo le cambiaría la concatenación en el count. No es necesaria. Con Count(1) es mas que suficiente.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 03/08/2010, 08:48
pompeighu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: SQL Query pregunta

Cita:
Iniciado por ioel10 Ver Mensaje
Buenos días,


select a,b,c, count(a||b||c) as reg, sum(monto) from tabla group by a,b,c order by reg


Un saludo y buen día.
Si la estructura cambiara y ahora fuera.


a | b | c | codigo | monto

00 | 001 | 0001 | z| 50
00 | 002 | 0002 | z| 20
00 | 002 | 0002 | z| 5
00 | 003 | 0003 | z| 20
00 | 003 | 0003 | z| 50
00 | 003 | 0003 | z| 10
00 | 003 | 0003 | z| 80
00 | 003 | 0004 | k| 80

y el resultado tuviera que ser.

codigo | #reg | "Suma Montos"

z| 3 | 235
k| 1 | 80

donde #reg fuera la cantidad de combinaciones a,b,c asociadas a un determinado "codigo". Como debería ser la query?. Gracias de antemano.
  #5 (permalink)  
Antiguo 03/08/2010, 11:03
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: SQL Query pregunta

igual que el otro...

Selec, codigo, count(1), sum(monto)
group by codigo
order by codigo
__________________
Odio verte ir, pero me encanta verte yendo :)
  #6 (permalink)  
Antiguo 03/08/2010, 14:41
pompeighu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: SQL Query pregunta

Cita:
Iniciado por -rommel_ Ver Mensaje
igual que el otro...

Selec, codigo, count(1), sum(monto)
group by codigo
order by codigo
Pero en esa query me sale:

codigo | #reg |monto
z| 7 | 235
k| 1 | 80

donde ese #reg es los numeros de registros asociados al codigo pero lo q sucede es que la combinacion a,b,c se repite a veces por lo q en realidad yo debo poner en #reg es el número de combinaciones distintas a,b,c.

En el caso q puse

00 | 001 | 0001 | z| 50
00 | 002 | 0002 | z| 20
00 | 002 | 0002 | z| 5
00 | 003 | 0003 | z| 20
00 | 003 | 0003 | z| 50
00 | 003 | 0003 | z| 10
00 | 003 | 0003 | z| 80
00 | 003 | 0004 | k| 80

para z existen combinaciones { 00,001,0001 / 00,002,0002 / 00,003,0003}
y para k existen {00,003,0004}
es decir
para Z | 3 |
y
para K | 1 |

yo necesito sacar un resultado asi con la query.

codigo | #combinaciones | "Suma Montos"

z| 3 | 235
k| 1 | 80
  #7 (permalink)  
Antiguo 04/08/2010, 02:12
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: SQL Query pregunta

Buenos días,

Código:
select codigo,
	count(distinct a || b || c) as "#reg",
	sum(monto) as "Suma Montos"
		from tabla
			group by codigo
				order by "#reg" desc
;
Tienes claro los resultados que quieres obtener, lo unico que te queda es traducirlo a sql.

Cita:
para z existen combinaciones
¿como se combinan/concatenan campos en sql? ...

Un saludo.
  #8 (permalink)  
Antiguo 04/08/2010, 14:52
pompeighu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: SQL Query pregunta

Cita:
Iniciado por ioel10 Ver Mensaje
Buenos días,

Código:
select codigo,
	count(distinct a || b || c) as "#reg",
	sum(monto) as "Suma Montos"
		from tabla
			group by codigo
				order by "#reg" desc
;
Tienes claro los resultados que quieres obtener, lo unico que te queda es traducirlo a sql.

¿como se combinan/concatenan campos en sql? ...

Un saludo.
Muchas gracias por la respuesta es lo a lo q necesitaba llegar. Ahora solamente quisiera agregar una cosa más al problema en cuestión.

En el caso q puse
a | b | c |
00 | 001 | 0001 | z| 50 | x
00 | 002 | 0002 | z| 20 |
00 | 002 | 0002 | z| 5 |
00 | 003 | 0003 | z| 20 | x
00 | 003 | 0003 | z| 50 | x
00 | 003 | 0003 | z| 10 | x
00 | 003 | 0003 | z| 80 | x
00 | 003 | 0004 | k| 80 |

Sabemos q Z tiene 3 (00, 001, 0001 / 00,002, 0002 / 00, 003, 0003)
y K tiene 1 (00,003,0004). Por eso tenemos el siguiente resultado:

z| 3 | 235
k| 1 | 80

Ahora, quisiera agregar al resultado un campo más que me diga cuantas combinaciones a,b,c tienen una x o algun valor x que no sea vacío.
En el ejemplo vemos q 00,001,0001 tiene una X y 00,003,0003 tambien tiene x.
Entonces el resultado sería
z| 3 | 235 | 2
k| 1 | 80 | 0
Es posible hacer esto?
  #9 (permalink)  
Antiguo 04/08/2010, 14:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: SQL Query pregunta

pompeighu No tomes un foro como el lugar donde te hacen las cosas (Aca se prestan ayudas, no se realizan trabajos).
Creo que con todas las respuestas que has recibido, se te ha mostrado el camino que debes seguir para resolver tu mismo los problemas. Tómalo como un consejo. Te lo digo, por que nisiquiera te tomas la molestia de tratar de hacer algo por resolver el problema, solo te dedicas a solicitar lo que necesitas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 04/08/2010, 15:08
pompeighu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: SQL Query pregunta

Cita:
Iniciado por huesos52 Ver Mensaje
pompeighu No tomes un foro como el lugar donde te hacen las cosas (Aca se prestan ayudas, no se realizan trabajos).
Creo que con todas las respuestas que has recibido, se te ha mostrado el camino que debes seguir para resolver tu mismo los problemas. Tómalo como un consejo. Te lo digo, por que nisiquiera te tomas la molestia de tratar de hacer algo por resolver el problema, solo te dedicas a solicitar lo que necesitas.
Ya he querido resolver este problema y he probado muchas querys. No pretendo q hagan mi tarea solo q me ayuden a comprender como armar la query. Por eso he hecho preguntas poco a poco incrementando la dificultad sobre un mismo tema. Si te molesta q pregunte a cada rato no le hagas caso a este post y punto, ignoralo. Si quisiera q hagan mi tarea por mi, escanearia el papel y lo postearia aqui y diria haganlo por mi.
  #11 (permalink)  
Antiguo 05/08/2010, 00:33
 
Fecha de Ingreso: julio-2010
Mensajes: 104
Antigüedad: 13 años, 9 meses
Puntos: 2
Respuesta: SQL Query pregunta

Buenos días,

Traducción a sql.
Cita:
cuantas combinaciones a,b,c
COUNT

Cita:
tienen una x o algun valor x que no sea vacío.
Campo(x) distinto/no sea vacío/nulo.

Viendo lo que preguntas y las diferencias entre la primera query y las siguientes, parece que lo unico que haces es escribir el problema y esperar a que te lluevan las querys. Si escribieras las querys con las que has probado demostrarías que algo has hecho.

Un saludo y buen día.

Última edición por ioel10; 05/08/2010 a las 01:54

Etiquetas: query, sql
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 12:35.