SQL: UPDATE Condicional |
Responder |
Autor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Tema: SQL: UPDATE Condicional Enviado: 30/Marzo/2020 a las 12:16 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
A ver si alguien me ilumina con un camino con el que no doy:
Tengo esta tabla:
la quiero actualizar con esta otra:
- se relacionan por el Id - condiciones: - si la clave es 1 -> Dato1 = Valor y DatoExtra = Extra - si la clave es 2 -> Dato2 = Valor - si la clave es 3 -> Dato3 = Valor Es decir TBase actualizada debe quedar:
Ya tengo un camino resuelto con un SQL por cada campo CLAVE, pero quiero hacerlo en una sola, algo del estilo: UPDATE (TBase LEFT JOIN TActualizacion ON TBase.Id = TActualizacion.ID) SET IIF(Clave=1, Dato1=Valor), IIF(Clave=2, Dato2=Valor, ...... ¿Se puede hacer esto? ¿o mi neurona ya desbarra con el encierro? Un saludo y gracias anticipadas a todos los participantes. Editado por Mihura - 30/Marzo/2020 a las 17:19 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 30/Marzo/2020 a las 13:13 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Por cierto, una solución ya probada sería:
... SET Dato1 = IIF(Clave=1, Valor, Dato1), Dato2 = IIF(Clave=2, Valor, Dato2) ... pero intentaba no 'reescribir' un valor en si mismo, además de que habría que escribir un bloque IIF por cada dato, por eso intento otra cosa |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4812 |
Enviado: 30/Marzo/2020 a las 19:37 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hola, quizás sea mas fácil recorrer toda la tabla con un RecordSet y grabando los nuevos datos en una tabla temporal , luego compruebas que los datos de la tabla temporal son correctos , en caso afirmativo solo tendrías que grabarlos en la tabla original y posteriormente borrar o vaciar la tabla temporal ,..... Bueno es solo una idea .......
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Enviado: 30/Marzo/2020 a las 19:48 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gracias Javier, de hecho está probada pero es más lenta que actualizar la tabla base con cinco tablas auxiliares (son cinco posibles claves) además de que las auxiliares ya están obtenidas en un paso anterior.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4812 |
Enviado: 30/Marzo/2020 a las 23:13 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Entiendo ,...... y si generas un función donde contenga ese Condicional y luego la función la embeses dentro del SQL ??? Ejemplo Public Function funNullToZero(PonNumero As Variant) As Double On Error Resume Next If IsNull(PonNumero) = True Then funNullToZero = 0 Else funNullToZero = PonNumero End If End Function SQL: SELECT funNullToZero(Sum(funNullToZero([QUANTITY])*funNullToZero([tblSituations].[TYPENEW])*IIf([IS_CORRECT]=(-1),1,0))) AS Q_MINUS, SKINS.EAN13 FROM (SKINS LEFT JOIN qrySkinsQ_SKINS_MOVIMENTS ON SKINS.CODE_SKIN = qrySkinsQ_SKINS_MOVIMENTS.CODE_SKIN) LEFT JOIN tblSituations ON qrySkinsQ_SKINS_MOVIMENTS.CODE_SITUATION = tblSituations.CODE_SITUATION GROUP BY SKINS.EAN13; Es otra idea ........ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |