在我们的数据库中,我们有一个系统用于跟踪应用程序。我们有一个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