在我們的數據庫中,我們有一個系統用於跟蹤應用程序。我們有一個bool專欄,表明申請是否獲得批准。然後是另一列,指示應用程序是否被拒絕。如果這兩列均不正確,則認爲該應用程序處於待處理狀態。從單獨的列中構建視圖列
在視圖中是否有任何簡單的方法將這些值合併爲一個值(比如說tinyint或者說「批准」,「拒絕」或「掛起」的字符串)?或者這是否需要類似Table-valued的函數?
更新:很難選擇答案選擇,因爲他們都有幫助。自他首次發佈以來,我會和baldy一起去。
在我們的數據庫中,我們有一個系統用於跟蹤應用程序。我們有一個bool專欄,表明申請是否獲得批准。然後是另一列,指示應用程序是否被拒絕。如果這兩列均不正確,則認爲該應用程序處於待處理狀態。從單獨的列中構建視圖列
在視圖中是否有任何簡單的方法將這些值合併爲一個值(比如說tinyint或者說「批准」,「拒絕」或「掛起」的字符串)?或者這是否需要類似Table-valued的函數?
更新:很難選擇答案選擇,因爲他們都有幫助。自他首次發佈以來,我會和baldy一起去。
,你可以在你的查詢中使用case語句:1時,則「批准」其他批准 選擇的情況下...
Case語句可以被嵌套這樣你就可以深入到不同的選擇。
爲什麼不使用具有3個不同值的int列,或者甚至可以使用一個布爾列,並啓用null。當它爲空時,等待1,批准0,否認0。
您可以使用一個case語句是這樣的:
select case
when Approved = 1 then 'Approved'
when Denied = 1 then 'Denied'
else 'Pending'
end 'Status'
既然你存儲已獲批准的和被拒絕的值,你不必擔心訂貨(具有優先級如果兩個都是真的嗎?)。你應該肯定只把它放到一個視圖中,所以你不必在以後重複這個邏輯。
從NTFS權限之後,我總是喜歡拒絕對具有優先權:
CASE
--Denied has precedence
WHEN Denied = 1 THEN 'Denied'
WHEN Approved = 1 THEN 'Approved'
ELSE 'Pending'
END as Status
除非你有妨礙它的其他要求,我比較喜歡可爲空的禿子的建議int或檢查約束TINYINT列。
我喜歡NTFS風格的邏輯。如果修復了基表,那麼CHAR/VARCHAR,默認的「Pending」,CHECK約束在「approved」,「denied」和「pending」上如何。 – onedaywhen 2008-10-22 13:38:34