2012-11-09 10 views
1

我面臨一個棘手的問題,因爲我的表有兩個不同的列,這兩個列決定記錄是否處於活動狀態。 (由於同一個數據庫一次又一次的變化,兩個不同列,當然不是我自己。)確定記錄是否在SQL Server的兩個不同列上使用OR條件激活

該字段是bit鍵入數據庫中。任何人都可以建議一個將從表中獲取記錄的查詢。

ex。 SELECT * FROM產品(isActive = 0或isCancelled = 1)

+1

這取決於你想如何解決isActive和isCancelled之間的矛盾。如果它們總是相反,那麼你只能檢查其中的一個,否則你必須在每種情況下提及應該考慮的事項。 – wxyz

+0

我不認爲該列是布爾類型的,因爲SQL Server沒有其中之一。也許你的意思是「位」...... –

+0

@Damien_The_Unbeliever是的,你是對的,它的位不是布爾值。請保留我的錯誤。 –

回答

1

不活動:

select * from product where isActive = 0 or isCancelled =1 

活躍

select * from product where isActive = 1 and isCancelled =0 
1

我覺得這裏是寫這個查詢

select * from product where isActive = 1 and isCancelled = 0 -- Active records 
select * from product where not (isActive = 1 and isCancelled = 0) -- Inactive records 
+0

正確地將「isActive = 1」和「isCancelled = 0」之間的「和」放在正確的位置? –

+0

是的,我覺得這個代碼很美。你可以通過表達式來過濾活動記錄,然後在 –

0

好方法我會選擇計算值:

select *, (isActive = 1 and isCancelled = 0) as active 
from product 

或更好,但創建一個視圖來隱藏這個醜陋:

create view complete_product as 
select *, (isActive = 1 and isCancelled = 0) as active 
from product 
+0

將「isActive = 1」和「isCancelled = 0」之間的「and」正確之前加上'not'來恢復它。 –

+0

@ coge.soft是的,它的語法是正確的。每個'='比較都會返回一個布爾值,然後用AND來返回最終的布爾值 – Bohemian

相關問題