2012-04-29 10 views
9

Tengo una tabla de la siguiente manera Table1¿Cómo cambio valores de columna de 0 a 1 y viceversa usando la declaración de actualización?

col1 col2 
---- ---- 
A 1 
B 1 
C 1 
D 0 
E 0 
F 0 

Quiero la tabla resultado debe ser el siguiente (utilizando Update declaración)

col1 col2 
---- ---- 
A 0 
B 0 
C 0 
D 1 
E 1 
F 1 
+0

Dependiendo del valor de la segunda columna si es 0, debería actualizarse con 1 y si es 1, debería actualizarse con 0. Intenté con la actualización y el caso pero no funcionaba. –

+0

El tipo de datos Col2 es entero. –

Respuesta

11

Estoy seguro de que es una forma más elegante, pero esto debería funcionar:

UPDATE Table1 
SET col2 = CASE col2 WHEN 0 THEN 1 WHEN 1 THEN 0 ELSE col2 END 
+0

Excelente ... Funciona bien. Muchas gracias por su rápida ayuda. :) –

21

Guión 1: Demo at SQL Fiddle

UPDATE dbo.Table1 SET col2 = (CASE col2 WHEN 1 THEN 0 ELSE 1 END); 

Guión 2: Si los valores son siempre 0 o 1, se puede utilizar el bit a bit OR exclusiva del operador. Demo at SQL Fiddle

UPDATE dbo.Table1 SET col2 = (col2^1); 
+0

El segundo funciona perfectamente. muchas gracias por tu ayuda. –

+0

En una prueba artificial, contra una mesa enorme, su Script 2 fue solo un pelo más rápido que mi intento. No estoy seguro de que podamos mejorar en eso. ¡Buen trabajo! –

10

Si está utilizando booleano adecuada (BIT) en SQL Server, puede utilizar esto: http://sqlfiddle.com/#!6/0ed3c/1

UPDATE dbo.Table1 SET col2 = ~col2; 
+0

Solo un nit-pick, BIT no es lo mismo que BOOLEAN. No hay ningún tipo BOOLEAN en SQL Server. –

+0

Sí, SQL Server no tiene booleano, es por eso que esto no funciona 'SELECT * FROM Assets WHERE IsInsured'. El BIT de SQL Server no es un booleano de primera clase como otras bases de datos (por ejemplo, PostgreSQL). El booleano de SQL Server es inexistente ya que estaba en Fortran. BIT es presentado por el equipo SQL Server con fines booleanos. Pero para todos los efectos, el BIT de SQL Server es en todos los bits un booleano. Entity Framework y muchos ORM también lo reconocen: http://stackoverflow.com/questions/1446054/set-model-property-to-boolean-in-entity-framework –

+0

+1 para los más elegantes –

7

Ya que menciona que está utilizando intercepciones, ¿qué tal:

update dbo.Table1 set col2 = 1 - col2; 
Cuestiones relacionadas