Problemas con el UPDATE

Tengo este SELECT, y de hecho me funciona perfectamente, pero mi consulta va por el lado de que omo puedo actualizar una tabla de nombre Base2, donde igual tiene un rasgo común el Cod6,
SELECT E.Cod6, E.decil01, (E.Decil01*(1+(0.5*(select TEN.Eingreso from TEN where TEN.cod6=E.cod6))))*(((1+(-Abs((SELECT TEN.Eingreso from TEN where TEN.cod6=E.cod6))*0.153846153846154))*0.15)) AS Resultado
FROM Encuesta AS E INNER JOIN TEN ON E.Cod6=[TEN].[Cod6]
WHERE (((E.Cod6)=[TEN].[cod6]));
pero no se como actualizar esta nueva tabla con este dato.
trato con UPDATE Base2 SET dato2= SELECT E.Cod6, E.decil01, (E.Decil01*(1+(0.5*(select TEN.Eingreso from TEN where TEN.cod6=E.cod6))))*(((1+(-Abs((SELECT TEN.Eingreso from TEN where TEN.cod6=E.cod6))*0.153846153846154))*0.15)) AS Resultado
FROM Encuesta AS E INNER JOIN TEN ON E.Cod6=[TEN].[Cod6]
WHERE (((E.Cod6)=[TEN].[cod6])))
where base.cod=E.cod6
Así la he pensado pero tengo problemas, no se como actualizarla con esos nevos valores, de hecho esa tabla es solo para guardar esos datos, espero que ue me podas dar una mano, gracias
1

1 respuesta

Respuesta
1
Bueno amigo acá por apariencia lo que veo es que tienes un pequeño problemita en el UPDATE y es que cuando le asignas a Dato2 ese select le estas asignando un select que lanza como respuesta 3 campos y un campo no puede recibir 3 entonces acondiciona ese select de asignación al dato2 para que la salida sea total y verídicamente solo un campo y un solo dato es decir el resultado de select debe ser solamente 1 dato y este sera el que le quieres asignar a Dato2, prueba con esto primero acondiciona bien tu select y si sigues teniendo problemas podremos seguir viendo que hacer
¿Cómo sabes que lanza 3 campos?, es que estoy aprendiendo un con esto del lenguaje SQL
UPDATE Base2 SET Datos2 = (SELECT (E.Decil01*(1+(0.5*(select TEN.Eingreso from TEN where TEN.cod6=E.cod6))))*(((1+(-Abs((SELECT TEN.Eingreso from TEN where TEN.cod6=E.cod6))*0.1538))*0.13)) AS Resultado
FROM Encuesta AS E INNER JOIN TEN ON E.Cod6=[TEN].[Cod6]
WHERE (((E.Cod6)=[TEN].[cod6])))
WHERE base2.cod6=TEN.Cod6
creoq ue te referias a el e.cod6 y el e.decil01 ademas de la formula, pero aun asi no me sale, y mas bien me pide que le de datos, luego me saca que la operación debe usar una consulta actualizable, de hecho no se por donde entrarle
Bueno amigo primero hay algo acá que no se puede hacer por lo que veo en la ultima linea estas tratando de comparar el dato de base2.cod6 con Ten.cod6 eso no se puede hacer
porque el subquery donde se encuentra ten.cod6 no se puede jalar a la clausula externa de condicionamiento del update pero lo he modificado
y espero este código te sirva
UPDATE Base2 SET Datos2 = (SELECT ((E.Decil01* (1+ (0.5*(SELECT TEN.Eingreso
from TEN
where TEN.cod6=E.cod6)))
) * (((1+(-Abs((SELECT TEN.Eingreso from TEN where TEN.cod6=E.cod6))*0.1538)) * 0.13))) AS Resultado
FROM Encuesta AS E INNER JOIN TEN ON E.Cod6=[TEN].[Cod6]
WHERE cod6=TEN.Cod6)
WHERE cod6=TEN.Cod6) tengo duda con este, cuadno uno llega a la ultima parte con cual es que tiene que hacer la relacion?? en este caso es porque use el mismo nombre para todos los datos pero en diferentes tablas
Vamos a ver según te entiendo no sabes como el update hará para saber que registro esta actualizando...
¿Es decir donde se relaciona lo que quieres actualizar con cada dato de la tabla a actualizar...?
Bueno la relación que estoste entre toda las tablas es por medio del Cod6, como pudiste ver, pero el código que me diste no me lo aplica, por eso te preguntaba, porque me dice que como hay varios nombres tienen el cod6, y yo lo relaciono con base2.cod6, pero me dice que tengo un error, entonces entro en duda de que si estoy haciendo las cosas bien, ves.
Para que veas en la tabla base2 tengo el cod6 y datos2 como columnas, y el cod6 son los mismos códigos que tiene las demás tablas, allí es donde quiero actualizar la consulta o la multiplicación pero no entiendo porque no me da, ves
Bueno la verdad es que la relacion la hace cuando le digo al final del query que va a actualizar cod6 = ten.cod6
Porque cod6 es el nombre del campo de la tabla que estoy actualizando en el momento y ten. Cod6 es el de la subconsulta pero si deseas para poder ayudarte mejor porque no me envías tu base de datos a [email protected] chequeo el query y te la envío de vuelta...
Ok, te lo enviare, espero que no te sorprendas de las barbaridades
No se nace sabiendo y si se nace para aprender" así que no te preocupes por eso
con el tiempo y el interés que pongas podrás aprender mucho y aunque ahorita tu base no este 100% optimizada
podrás a medida que aprendas hacerlo mejor...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas