2012-04-29 16 views
9

Tôi có một bảng Table1 như sauLàm cách nào để chuyển đổi các giá trị cột từ 0 sang 1 và ngược lại bằng cách sử dụng câu lệnh cập nhật?

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

Tôi muốn các bảng kết quả nên thực hiện như sau (bằng cách sử dụng Update tuyên bố)

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

Tùy thuộc vào giá trị cột thứ hai nếu nó là 0 thì nó nên cập nhật với 1 và nếu nó là 1 thì nó nên cập nhật với 0. Tôi đã thử với bản cập nhật và trường hợp nhưng nó không hoạt động. –

+0

Kiểu dữ liệu Col2 là số nguyên. –

Trả lời

11

tôi chắc chắn rằng có một cách thanh lịch hơn, nhưng điều này sẽ hoạt động:

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

Tuyệt vời ... Nó hoạt động tốt. Cảm ơn rất nhiều vì đã giúp bạn nhanh chóng. :) –

21

Script 1: Demo at SQL Fiddle

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

Script 2: Nếu các giá trị luôn là 0 hoặc 1, bạn có thể sử dụng Bitwise Dành riêng OR. Demo at SQL Fiddle

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

Thứ hai đang hoạt động hoàn hảo. cảm ơn sự giúp đỡ của bạn. –

+0

Trong thử nghiệm giả tạo, đối với một bảng khổng lồ, Tập lệnh 2 của bạn chỉ là mái tóc nhanh hơn thử của tôi. Không chắc chúng tôi có thể cải thiện điều đó. Công việc tốt đẹp! –

10

Nếu bạn đang sử dụng boolean thích hợp (BIT) trên SQL Server, bạn có thể sử dụng này: http://sqlfiddle.com/#!6/0ed3c/1

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

Chỉ cần chọn nit, BIT không giống với BOOLEAN. Không có kiểu BOOLEAN trong SQL Server. –

+0

Có, SQL Server không có boolean, đó là lý do tại sao nó không hoạt động 'SELECT * FROM Assets WHERE IsInsured'. Tuy nhiên, BIT của SQL Server không phải là boolean hạng nhất làm cơ sở dữ liệu khác (ví dụ: PostgreSQL). Boolean của SQL Server không tồn tại như trên Fortran. BIT được giới thiệu bởi nhóm SQL Server cho các mục đích boolean. Nhưng đối với tất cả các ý định và mục đích, BIT của SQL Server là ở mỗi bit một boolean. Entity Framework và nhiều ORMs cũng tôn vinh điều này: http://stackoverflow.com/questions/1446054/set-model-property-to-boolean-in-entity-framework –

+0

+1 cho thanh lịch nhất –

7

Vì bạn nói bạn đang sử dụng INTs, làm thế nào về:

update dbo.Table1 set col2 = 1 - col2; 
Các vấn đề liên quan