如何从视图中的可为空列中驱动布尔字段? (SQL 服务器)
Posted
技术标签:
【中文标题】如何从视图中的可为空列中驱动布尔字段? (SQL 服务器)【英文标题】:How can I drive a boolean field off of a nullable column in a view? (SQL Server) 【发布时间】:2015-12-16 16:51:25 【问题描述】:我在数据库中创建了一个视图。在这种情况下,Score 可以为空。
SELECT Student.Name, Score.Score
FROM Student JOIN Score ON Student.StudentID = Score.StudentID
现在,我想根据 Score 的值向此视图添加一个名为“IfScoreIsNull”的列。如果 Score 不为 NULL,则 IfScoreIsNull 将为 0。否则,将为 1。
基本上,我希望布尔字段由分数列是否为空来驱动。
完成此任务的最佳方法是什么?谢谢!
【问题讨论】:
【参考方案1】:您可以使用CASE expression。这些非常适合有条件地返回数据。这是一个例子:
CASE WHEN Score.Score IS NULL THEN 1 ELSE 0 END AS IfScoreIsNull
这将是你的完整陈述:
SELECT
Student.Name,
Score.Score,
CASE WHEN Score.Score IS NULL THEN 1 ELSE 0 END AS IfScoreIsNull
FROM
Student
INNER JOIN Score ON Student.StudentID = Score.StudentID
;
编辑:在我原来的答案中,我错误地将 case 表达式称为 case 语句。语句是更常见的形式。许多语言都有这些,他们习惯于control flow。在 SQL 中,我们有 case 表达式。它们返回一个基于布尔表达式的标量值。
【讨论】:
【参考方案2】:您可以在Sql Server 2012+
中执行此操作。使用IIF
select
IIF(Score.Score IS NULL,1,0) AS IfScoreIsNUll
.....
【讨论】:
【参考方案3】:SELECT
Student.Name,
Score.Score,
CASE WHEN Score.Score IS NULL THEN 1 ELSE 0 END AS IfScoreIsNUll
FROM Student JOIN Score ON Student.StudentID = Score.StudentID
【讨论】:
以上是关于如何从视图中的可为空列中驱动布尔字段? (SQL 服务器)的主要内容,如果未能解决你的问题,请参考以下文章