2012-04-29 4 views
9

Ich habe eine Tabelle Table1 alsWie kann ich mit der update-Anweisung die Spaltenwerte von 0 auf 1 und umgekehrt umschalten?

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

folgt ich die Ergebnistabelle will, sollte wie folgt sein (durch Update Anweisung)

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

Abhängig vom Wert der zweiten Spalte, wenn es 0 ist, sollte es mit 1 aktualisiert werden, und wenn es 1 ist, sollte es mit 0 aktualisiert werden. Ich versuchte mit Update und Fall, aber es hat nicht funktioniert. –

+0

Col2 Datentyp ist Integer. –

Antwort

11

Ich bin sicher, dass es eine elegantere Weg ist, aber dies sollte funktionieren:

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

Ausgezeichnet ... Es funktioniert gut. Vielen Dank für Ihre schnelle Hilfe. :) –

21

Script 1: Demo at SQL Fiddle

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

Script 2: Wenn die Werte sind immer 0 oder 1, können Sie die bitweise Exklusiv-ODER-Operator nutzen könnten. Demo at SQL Fiddle

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

Zweites funktioniert perfekt. Vielen dank für Deine Hilfe. –

+0

In einem erfundenen Test, gegen einen riesigen Tisch, war dein Script 2 nur ein Haar schneller als mein Versuch. Ich bin nicht sicher, ob wir das verbessern können. Gute Arbeit! –

10

Wenn Sie die richtige boolean (BIT) auf SQL Server verwenden, können Sie diese verwenden: http://sqlfiddle.com/#!6/0ed3c/1

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

Nur ein Nitpick, BIT ist nicht das gleiche wie BOOLEAN. Es gibt keinen BOOLEAN-Typ in SQL Server. –

+0

Ja, SQL Server hat keinen booleschen Wert, deshalb funktioniert das nicht 'SELECT * FROM Assets WHERE IsInsured'. Das SQL Server-BIT ist kein Boolescher Boolescher Wert wie andere Datenbanken (z. B. PostgreSQL). Der boolesche Wert von SQL Server ist nicht existent wie bei Fortran. BIT wird vom SQL Server-Team für Boolesche Zwecke eingeführt. Aber in jeder Hinsicht ist das BIT von SQL Server in jeder Hinsicht ein boolescher Wert. Entity Framework und viele ORMs beachten dies auch: http://StackOverflow.com/Questions/1446054/Set-Model-Property-To-Boolean-Inen-Entity-Framework –

+0

+1 für die meisten eleganten –

7

Da Sie erwähnt Sie INTs verwenden, wie etwa:

update dbo.Table1 set col2 = 1 - col2; 
Verwandte Themen