2008-10-22 20 views
4

在我們的數據庫中,我們有一個系統用於跟蹤應用程序。我們有一個bool專欄,表明申請是否獲得批准。然後是另一列,指示應用程序是否被拒絕。如果這兩列均不正確,則認爲該應用程序處於待處理狀態。從單獨的列中構建視圖列

在視圖中是否有任何簡單的方法將這些值合併爲一個值(比如說tinyint或者說「批准」,「拒絕」或「掛起」的字符串)?或者這是否需要類似Table-valued的函數?

更新:很難選擇答案選擇,因爲他們都有幫助。自他首次發佈以來,我會和baldy一起去。

回答

2

,你可以在你的查詢中使用case語句:1時,則「批准」其他批准 選擇的情況下...

Case語句可以被嵌套這樣你就可以深入到不同的選擇。

爲什麼不使用具有3個不同值的int列,或者甚至可以使用一個布爾列,並啓用null。當它爲空時,等待1,批准0,否認0。

6

您可以使用一個case語句是這樣的:

select case 
    when Approved = 1 then 'Approved' 
    when Denied = 1 then 'Denied' 
    else 'Pending' 
    end 'Status' 
6

既然你存儲已獲批准的和被拒絕的值,你不必擔心訂貨(具有優先級如果兩個都是真的嗎?)。你應該肯定只把它放到一個視圖中,所以你不必在以後重複這個邏輯。

從NTFS權限之後,我總是喜歡拒絕對具有優先權:

CASE 
    --Denied has precedence 
    WHEN Denied = 1 THEN 'Denied' 
    WHEN Approved = 1 THEN 'Approved' 
    ELSE 'Pending' 
END as Status 

除非你有妨礙它的其他要求,我比較喜歡可爲空的禿子的建議int或檢查約束TINYINT列。

+0

我喜歡NTFS風格的邏輯。如果修復了基表,那麼CHAR/VARCHAR,默認的「Pending」,CHECK約束在「approved」,「denied」和「pending」上如何。 – onedaywhen 2008-10-22 13:38:34