在我们的数据库中,我们设置了一个系统来跟踪应用程序。我们有一个 bool 列,指示应用程序是否被批准。然后还有另一列指示申请是否被拒绝。如果两列都不为真,则认为该应用程序处于待处理状态。
有没有什么简单的方法可以在视图中将它们合并为一个值(比如一个 tinyint 或者一个字符串,上面写着“已批准”、“拒绝”或“待定”)?或者这需要像表值函数这样的东西吗?
更新:很难选择答案选择,因为它们都很有帮助。自从他第一次发布以来,我会选择baldy。
在我们的数据库中,我们设置了一个系统来跟踪应用程序。我们有一个 bool 列,指示应用程序是否被批准。然后还有另一列指示申请是否被拒绝。如果两列都不为真,则认为该应用程序处于待处理状态。
有没有什么简单的方法可以在视图中将它们合并为一个值(比如一个 tinyint 或者一个字符串,上面写着“已批准”、“拒绝”或“待定”)?或者这需要像表值函数这样的东西吗?
更新:很难选择答案选择,因为它们都很有帮助。自从他第一次发布以来,我会选择baldy。
您可以使用这样的 case 语句:
select case
when Approved = 1 then 'Approved'
when Denied = 1 then 'Denied'
else 'Pending'
end 'Status'
由于您同时存储了 Approved 和 Denied 值,因此您必须担心排序(如果两者都为 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 列的建议。
您可以在查询中使用 case 语句:select case approved when 1 then 'Approved' else ...
Case 语句可以嵌套,因此您可以深入研究不同的选项。
为什么不使用具有 3 个不同值的 int 列,或者您甚至可以使用一个 bool 列,启用 null。当为 null 时,它处于待处理状态,1 批准,0 拒绝。