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

Como poner restricción al resultado de una consulta.

Estas en el tema de Como poner restricción al resultado de una consulta. en el foro de SQL Server en Foros del Web. Hola a tod@s: Estoy manejando un access pero no creo que haya mucha diferencia en la solución del problema que estoy sin poder resolver. Cuando ...
  #1 (permalink)  
Antiguo 19/07/2011, 01:02
 
Fecha de Ingreso: enero-2011
Mensajes: 88
Antigüedad: 13 años, 4 meses
Puntos: 1
Información Como poner restricción al resultado de una consulta.

Hola a tod@s:

Estoy manejando un access pero no creo que haya mucha diferencia en la solución del problema que estoy sin poder resolver.

Cuando inserto una fila en una tabla quiero saber si la suma de unos valores agrupados por id supera un valor determinado. No consigo hacerlo porque la restricción se debe valorar en una consulta no en la misma tabla.

Tengo esto: tengo estas tablas con
tramos(id, longitud, descripcion)
y
trozostramos(id, idtramo, porcentaje, tiposuelo)
He restringido que el valor de porcentaje metido no sea mayor que 100 pero ...
el tema es que con este modelo puedo decir que en un tramo tengo 40% de asfalto y 60% de tierra por ejemplo. Pero si no restrinjo que la suma de los porcentajes no pueda superar el 100% puede que al meter los datos se meta que tenga un tramo con 50% de grabilla y 70% de tierra (120% dato erroneo).

No quiero que esto pueda suceder. Tengo una consulta hecha que me da los id-s de tramo con la suma de porcentajes ("select idtramo, sum(porcentaje) from trozostramos group by idtramo") pero no puedo restringir que no pueda superar el valor 100.

¿Alguien lo sabe hacer, me puede ayudar? Gracias atentamente Eñaut.
  #2 (permalink)  
Antiguo 19/07/2011, 02:24
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 14 años, 6 meses
Puntos: 7
Respuesta: Como poner restricción al resultado de una consulta.

has intentado con un store procedure?

o puedes hacerlo de la siguiente manera:

Código SQL:
Ver original
  1. DECLARE @NEW NUMERIC(9)
  2. SET  @NEW = 20 --valor a insertar
  3. DECLARE @tramo NUMERIC(9)
  4. SET @tramo = 1 --valor a buscar y calcular en la suma
  5. DECLARE @por NUMERIC(9)
  6. SET @por = (SELECT  SUM(porcentaje) FROM trozostramos WHERE idtramo=@tramo GROUP BY idtramo)
  7.  
  8. IF @por>=100
  9. BEGIN
  10.         SELECT 'EL porcentaje es superado'
  11. END
  12. ELSE
  13. BEGIN
  14.         IF (@por + @NEW)>100
  15.         BEGIN
  16.                SELECT 'El nuevo dato hace que se supere el 100%'
  17.         END
  18.         ELSE
  19.          BEGIN
  20.                --insertar dato
  21.                INSERT INTO x (campos) VALUES(valores)
  22.                SELECT 'datos insertados'
  23.          END
  24. END
  #3 (permalink)  
Antiguo 19/07/2011, 02:46
 
Fecha de Ingreso: enero-2011
Mensajes: 88
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Como poner restricción al resultado de una consulta.

Hola, gracias por responder:

Lo que he intentado ha sido con el evento after insert.
Cuando meto un nuevo trozodetramo quería comprobar que se cumpliera esa regla, como en el formulario de inserción tengo el idtramo y el porcentaje a insertar podría hacer el cálculo.

Te parece que es el evento adecuado para hacer la comprobación? Si la comprobación fuera negativa tendría que anular el inser. Como aría eso? Mejor otro evento?

Por otro lado si edito directamente sin usar formulario la manera que me dices funcionaría?

Gracias, atentamente Eñaut.
  #4 (permalink)  
Antiguo 20/07/2011, 02:05
Avatar de Joch_pa  
Fecha de Ingreso: octubre-2009
Ubicación: Pachuca De Soto, Hidalgo, Mexico, Mexico
Mensajes: 122
Antigüedad: 14 años, 6 meses
Puntos: 7
Respuesta: Como poner restricción al resultado de una consulta.

pues yo creo que debería ser before insert
porque después de insertar ya te daría el problema, por ejemplo tenias 80 e insertas 30 resultado 110, entonces tendrías que descontar 10 a uno de los dos.

en lo que te habia puesto antes es antes del insert, y si resulta negativo en dos condiciones hará el insert.

por ejemplo:
1.-
quiero agregar 30
cuanto tengo? 80
es menor a cien? si
la suma de lo que tengo actualmente mas lo que quiero agregar es menor o igual a cien? no
regreso que no es valido lo que se desea agregar
2.-
quiero agregar 10
cuanto tengo? 100
es menor a cien? no
regresa que ya se tiene 100
3.-
quiero agregar 5
cuanto tengo? 20
es menor a cien si
la suma de lo que tengo actualmente mas lo que quiero agregar es menor o igual a cien? si
entonces inserto y regreso que se ha hecho la inserción

eso del formulario no lo entiendo, pero lo que aquí te pongo es que el mismo motor de BD, por asi decirlo, es el que se encargará de hacer la chamba del calculo y respuestas

claro el calculo lo puedes hacer desde el formulario y ahí ves si insertas o no

con el store procedure solo lo llamarías con dos parámetros y el te diría cual fue el resultado, solo que yo no te lo deje como store, solo como query, habría que hacerle unas modificaciones
  #5 (permalink)  
Antiguo 20/07/2011, 03:11
 
Fecha de Ingreso: enero-2011
Mensajes: 88
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: Como poner restricción al resultado de una consulta.

Hola, gracias por la respuesta:

Lo del formulario es que tengo un formulario para meter asignar trozos de tramo a los tramos. Es un formulario que puedo ir de tramo en tramo y en cada registro de tramo tengo un subformulario que aparecen y puedo agregar trozos de tramo.

El problema lo as entendido bien y la solución tambien es buena. Pero no se bien si pode implementarla en access.

Con lo que me has dicho querría hacer cundo en el subformulario agrege un nuevo trozo de tramo al tramo. Antes del insert ejecutar que sume todos los porcentajes mas lo que intento meter y dejar hacer la operación o no.

El porblema esta en que algunas veces tengo:

80 y quiero meter X
otras veces:
60, 20, 5 y quiero meter X
es decir:
n1, n2, n3, ... y quiero meter X

tengo que hacer la suma de todos los trozos que estan en ese tramo, y no se como hacerlo.

Tengo unas consultas que me dan esos datos(suma de porcentajes de trozos por tramo) pero con el evento de before insert no se como ejecutar y tratar esa consulta para autorizar o abortar esa operación.

No se si en desde aqui y sin poder subir unas imagenes de mis ventanas podemos solucionar el problema. De momento tengo esas consultas que ejecutandolas me devuelben que tramos tengo mal rellenos con trozos de tramos, es decir que superan el 100%. Y así se corrigen a mano.

Gracias por la ayuda, atentamente eñaut.

Etiquetas: consulta-sql, consultaaccess, consultabd, regla, restringir
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:19.