2008-10-22 52 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