使用单独的列构建视图列

时间:2008-10-22 12:25:15

标签: sql sql-server views

在我们的数据库中,我们设置了一个系统来跟踪应用程序。我们有一个bool列,表明该应用程序是否被批准。然后是另一列,指示应用程序是否被拒绝。如果两列都不为true,则认为应用程序处于待处理状态。

是否有任何简单的方法可以将这些值合并为一个值(例如,在视图中将tinyint或者字符串表示为“已批准”,“已拒绝”或“待定”)?或者这是否需要像表值函数那样的东西?

更新:很难选择答案,因为它们都很有帮助。自从他首先发布以来,我会选择baldy。

3 个答案:

答案 0 :(得分:6)

您可以使用如下的案例陈述:

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

答案 1 :(得分:6)

由于您同时存储了已批准和已拒绝的值,因此您必须担心排序(如果两者都为True,则优先排序?)。您应该肯定只将它放入View中,这样您就不必在以后重复该逻辑。

根据NTFS权限,我总是更喜欢Deny优先:

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

除非你有其他要求排除它,否则我更喜欢Baldy建议的可以为空的int或检查约束tinyint列。

答案 2 :(得分:2)

您可以在查询中使用case语句: 选择案例批准为1然后'批准'否则......

Case语句可以嵌套,因此您可以深入研究不同的选项。

为什么不使用具有3个不同值的int列,或者甚至可以使用一个bool列,并启用null。如果为null,则表示挂起,1表示已批准,0表示已拒绝。