使用单独的列构建视图列

Jas*_*ker 4 sql sql-server views

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

有没有简单的方法将它们合并为一个值(比如说一个tinyint或者一个字符串在视图中说"已批准","拒绝"或"待定")?或者这是否需要类似表值函数的东西?

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

Ben*_*enR 6

你可以使用这样的case语句:

select case 
  when Approved = 1 then 'Approved'
  when Denied = 1 then 'Denied'
  else 'Pending'
  end 'Status'
Run Code Online (Sandbox Code Playgroud)


Mar*_*ett 6

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

遵循NTFS权限,我总是更喜欢Deny优先:

CASE 
    --Denied has precedence
    WHEN Denied = 1 THEN 'Denied'
    WHEN Approved = 1 THEN 'Approved'
    ELSE 'Pending'
END as Status
Run Code Online (Sandbox Code Playgroud)

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