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

Campos calculados en tabla basados en registros de otras tablas

Estas en el tema de Campos calculados en tabla basados en registros de otras tablas en el foro de SQL Server en Foros del Web. Muy buenas. Soy novato totalmente en esto de SQL. Si que he hecho cosas en VBA Access y tal y aunque veo ciertas similitudes me ...
  #1 (permalink)  
Antiguo 26/09/2013, 08:25
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Campos calculados en tabla basados en registros de otras tablas

Muy buenas.
Soy novato totalmente en esto de SQL.
Si que he hecho cosas en VBA Access y tal y aunque veo ciertas similitudes me lío un poco.
Mi duda es como conseguir recorrer una tabla y asignarle a un campo de esta tabla un cálculo basado en otros registros de otras tablas.

Ejemplo común:

Tengo una tabla facturas. En esta tabla tengo un campo "ImporteFactura".
Una tabla "Albaranes".
Una tabla "DetalleAlbaran".
Una tabla "Articulos".

Están relacionadas una a varios, Una factura tiene varios albaranes, Un albaran tiene varios detalles... etc

La idea es rellenar el campo "ImporteFactura" de la tabla Facturas con la suma de todos los albaranes cargados a esa factura que a su vez tiene los detalles con cierta cantidad e artículos y precios por cada albarán.

No se si me explicado bien.
  #2 (permalink)  
Antiguo 26/09/2013, 08: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: Campos calculados en tabla basados en registros de otras tablas

es hace un join de las tablas y sacando la suma, para ayudarte un poco podrias poner un ejemplo de tus datos? y que es lo que quieres obtener :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 27/09/2013, 05:58
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Campos calculados en tabla basados en registros de otras tablas

Si.

A ver si me puedo explicar mejor. La cláusula sería (en PseudoSQL ) algo así:

Primero, filtrar solo los registros que no tengan valor en el campo:

Código SQL:
Ver original
  1. SELECT * FROM TablaFacturas WHERE ImporteFactura IS NULL.

Segundo, recorrer, calcular e insertar el valor en cada campo de cada fila:

ImporteFactura = Suma (Del valor del campo "Subtotal" de todos los albaranes (o sea filas)) de la tabla Albaranes
cuyo valor del campo "Factura" de dicha tabla Albaranes coincida con el valor del campo "Factura" de la TablaFacturas...
En la cual tenemos el foco actualmente.

Otra cosa importante:

Indagando y probando cosas, he visto que se pueden crear campos calculados en las tablas y que los valores se actualizan automáticamente
sin tener que estar lanzando código de este tipo, así que supongo el sistema tendrá menos carga de trabajo.

Una vez generada correctamente la cláusula de arriba, se puede insertar en el campo "Especificación de columna calculada" en el diseño
de la tabla, o necesita otro tipo de expresiones diferentes.

Y lo último:

Me recomendáis algún libro (Castellano, of course) para aprendizaje de SQL Server que se adentre en este tipo de cosas.

La idea (o mi gran ilusión, que no se yo...) sería migrar una base de datos Access con un montón de código VBA a SQL Server y posteriormente pasar todo
el FrontEnd de los formularios de Access a .ASP o lo que me recomendéis. (De programación html y web, ni papa).

Muchas gracias de antemano.

Última edición por gnzsoloyo; 27/09/2013 a las 06:11
  #4 (permalink)  
Antiguo 27/09/2013, 06:41
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: Campos calculados en tabla basados en registros de otras tablas

de nuevo un ejemplo de tus datos seria de mucha ayuda, y quieres migrar una aplicacion de access con VBA a .net sin tener idea de programacion??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 27/09/2013, 08:17
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Campos calculados en tabla basados en registros de otras tablas

Hombre, en VBA me defiendo. Los demás lenguajes tendré que ir aprendiendo, empezando por SQL.

Adjunto captura para ver si me explico mejor:

  #6 (permalink)  
Antiguo 27/09/2013, 08:33
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: Campos calculados en tabla basados en registros de otras tablas

si te entendi puedes hacer esto:

Código SQL:
Ver original
  1. UPDATE tblfacturas
  2. SET importefactura=t1.total
  3. FROM
  4. (
  5. SELECT factura,SUM(subtotal) AS total FROM tblalbaranes AS a
  6. INNER JOIN tbldetallealbaran AS b ON (a.albaran=b.albaran)
  7. GROUP BY factura
  8. ) AS t1 WHERE t1.factura=tblfacturas.factura

Campos calculados automaticos seria que crearas una vista que obtenga la suma y en lugar de consultar la tabla de facturas consultarias la vista :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 29/09/2013, 09:47
 
Fecha de Ingreso: enero-2009
Mensajes: 7
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Campos calculados en tabla basados en registros de otras tablas

Ok.
Lo he probado y funciona. Muchas Gracias por la ayuda

..Pero quisiera simplificarlo (más que nada por aprender). Intento cargarlo directamente sin hacer llamadas a la tabla de detalle porque me he dado cuenta que no era necesario y cargo la sentencia siguiente pero me da error. La he remirado unas cuantas veces y consultado otros ejemplos y no entiendo donde está el fallo:
Código SQL:
Ver original
  1. SELECT SUM(Sbtotal), factura FROM TblAlbaranes
  2. WHERE Factura = '860' GROUP BY Factura
  3. INNER JOIN TblFacturas ON (TblAlbaranes.Factura = TblFacturas.Factura)

La primera sentencia funciona bien. A partir de Inner Join falla.

Última edición por gnzsoloyo; 30/09/2013 a las 09:11
  #8 (permalink)  
Antiguo 30/09/2013, 08:39
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: Campos calculados en tabla basados en registros de otras tablas

Código SQL:
Ver original
  1. SELECT SUM(Sbtotal), factura
  2. FROM TblAlbaranes
  3. INNER JOIN TblFacturas ON (TblAlbaranes.Factura = TblFacturas.Factura)
  4. WHERE TblAlbaranes.Factura = '860' GROUP BY TblAlbaranes.Factura
Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 30/09/2013 a las 09:11

Etiquetas: campos, registro, registros, sql, tabla, tablas
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 01:37.