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

Hacer un Update usando Case!

Estas en el tema de Hacer un Update usando Case! en el foro de SQL Server en Foros del Web. Hola a todos, quisiera que me ayudaran con un problema que tengo con una consulta, es posible hacer un update con varios case?... Eh intentando ...
  #1 (permalink)  
Antiguo 19/07/2012, 14:50
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Información Hacer un Update usando Case!

Hola a todos, quisiera que me ayudaran con un problema que tengo con una consulta, es posible hacer un update con varios case?...

Eh intentando hacerlo de esta manera, pero no consigo que funcione

Quisiera que si un campo tiene como dato lo que le especifique en el case, pues me lo actualice con otro dato :p...

Esto es lo que tengo:

Código SQL:
Ver original
  1. UPDATE Reemplazos3 SET status1 = (CASE
  2. WHEN (status1 = 'RECHAZADO PARA MODIFICACION')
  3. THEN status1='EN ESPERA' ELSE status1 END), (status15 = CASE
  4. WHEN (status15 = 'RECHAZADO PARA MODIFICACION')
  5. THEN status15='EN ESPERA' ELSE status15 END), (status2 = CASE
  6. WHEN (status2 = 'RECHAZADO PARA MODIFICACION')
  7. THEN status2='EN ESPERA' ELSE status2 END), (status25 = CASE
  8. WHEN (status25 = 'RECHAZADO PARA MODIFICACION')
  9. THEN status25='EN ESPERA' ELSE status25 END), (status3 = CASE
  10. WHEN (status3 = 'RECHAZADO PARA MODIFICACION')
  11. THEN status3='EN ESPERA' ELSE status3 END)

Pero me marca el siguiente error:

Servidor: mensaje 170, nivel 15, estado 1, línea 3
Línea 3: sintaxis incorrecta cerca de '='.



Estoy usando SQL Server 2000, de antemano agradezco su ayuda n_n...
  #2 (permalink)  
Antiguo 19/07/2012, 16:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Hacer un Update usando Case!

y si lo haces tipo:

Código SQL:
Ver original
  1. UPDATE tabla
  2. SET campo=t1.dato
  3. FROM
  4. (
  5. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  6. ) AS t1 WHERE tabla.campo=t1.campo

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 19/07/2012, 18:44
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Hacer un Update usando Case!

Pero así tendría que hacer varios UPADTE's o ahm, varias tablas temporales cierto?... Algo así:

Código SQL:
Ver original
  1. UPDATE tabla
  2. SET campo=t1.dato
  3. FROM
  4. (
  5. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  6. ) AS t1,
  7. campo=t2.dato
  8. FROM
  9. (
  10. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  11. ) AS t2,
  12. campo=t3.dato
  13. FROM
  14. (
  15. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  16. ) AS t3,
  17. WHERE
  18. tabla.campo=t1.campo
  19. AND tabla.campo=t2.campo
  20. AND tabla.campo=t3.campo

Sería algo así, lo que pasa es que ahorita no estoy con la base de datos que estoy trabajando y no la puedo hechar a andar, la probaré lo más pronto posible mañana y te cuento, pero si será así más o menos para varios campos?...

Saludos y gracias!...
  #4 (permalink)  
Antiguo 19/07/2012, 20:42
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 12 años, 4 meses
Puntos: 40
Respuesta: Hacer un Update usando Case!

Yo lo haría asi:
Código SQL:
Ver original
  1. UPDATE  Reemplazos3
  2. SET     status1=CASE WHEN status1='RECHAZADO PARA MODIFICACION' THEN 'EN ESPERA' ELSE status1 END,
  3.         status15=CASE WHEN status15='RECHAZADO PARA MODIFICACION' THEN 'EN ESPERA' ELSE status15 END,
  4.         status2=CASE WHEN status2='RECHAZADO PARA MODIFICACION' THEN 'EN ESPERA' ELSE status2 END,
  5.         status25=CASE WHEN status25='RECHAZADO PARA MODIFICACION' THEN 'EN ESPERA' ELSE status25 END,
  6.         status3=CASE WHEN status3='RECHAZADO PARA MODIFICACION' THEN 'EN ESPERA' ELSE status3 END;
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #5 (permalink)  
Antiguo 20/07/2012, 07:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Hacer un Update usando Case!

Cita:
Iniciado por stuart_david3 Ver Mensaje
Pero así tendría que hacer varios UPADTE's o ahm, varias tablas temporales cierto?... Algo así:

Código SQL:
Ver original
  1. UPDATE tabla
  2. SET campo=t1.dato
  3. FROM
  4. (
  5. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  6. ) AS t1,
  7. campo=t2.dato
  8. FROM
  9. (
  10. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  11. ) AS t2,
  12. campo=t3.dato
  13. FROM
  14. (
  15. SELECT CASE WHEN campo=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  16. ) AS t3,
  17. WHERE
  18. tabla.campo=t1.campo
  19. AND tabla.campo=t2.campo
  20. AND tabla.campo=t3.campo

Sería algo así, lo que pasa es que ahorita no estoy con la base de datos que estoy trabajando y no la puedo hechar a andar, la probaré lo más pronto posible mañana y te cuento, pero si será así más o menos para varios campos?...

Saludos y gracias!...
porque varios subquerys? si todos son sobre la misma columna nada mas pondrias el valor que necesitas, la solucion del compañero GeriReshef se ve bien y aplica tambien para tu caso :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 20/07/2012, 08:21
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Hacer un Update usando Case!

Hola Libras y GeriReshef, pues lo que pasa es que no es solo un campo, son varios, así:

Código SQL:
Ver original
  1. UPDATE tabla
  2. SET campo1=t1.dato
  3. FROM
  4. (
  5. SELECT CASE WHEN campo1=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  6. ) AS t1,
  7. campo2=t2.dato
  8. FROM
  9. (
  10. SELECT CASE WHEN campo2=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  11. ) AS t2,
  12. campo3=t3.dato
  13. FROM
  14. (
  15. SELECT CASE WHEN campo3=1 THEN 'si' ELSE no END AS dato, campo FROM tabla
  16. ) AS t3,
  17. WHERE
  18. tabla.campo1=t1.campo
  19. AND tabla.campo2=t2.campo
  20. AND tabla.campo3=t3.campo

Creo que la ejemplifique mal, xD...

Ya gracias a Dios funciona, utilice la consulta del buen GeriReshef, te lo agradezco mucho mi hermano, funciona al 100... Saludos!... Muchísimas graaaaciaaaaaaaaas!...

Etiquetas: case, sql, sql-server-2000, update
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:11.