我可以在视图中使用复杂吗?

时间:2017-06-07 14:08:47

标签: sql-server

我想从表 T1 创建一个包含两个字段的视图,一个是ID,另一个可以从字段名称 Name_aux中获取其值即可。逻辑是从Name_2获取值,除非它是 NULL 为空('' )或空格。我不能对表格进行任何改动。

T1有这样的结构:

|ID|Name |Name_2|
|1 |T001 |      |
|2 |T001T|T001X |  
|3 |T002 |      |

我使用了IIF函数但是虽然我可以在脚本中使用它,但我无法在查询中使用它:

SELECT ID, IIF( (([Name_2] = '') OR ([Name_2] = ' ') OR ([Name_2] IS NULL)), 
[Name], [Name_2] ) AS NAME
FROM     dbo.T1

我已在此thread中读到,在视图中不可能使用复杂的IF逻辑,但由于它来自几年前,我想再问一次。

如果没有其他解决方案,我可以做一个用户定义的函数,它接收两个字符串并返回一个,但我想避免这种情况。

谢谢

2 个答案:

答案 0 :(得分:1)

使用Case作为下一个演示: -

declare @MyTable table (id int identity, name varchar(10), name_2 varchar(10))

insert into @MyTable values ('T001',NULL),('T001T','T001X'),('T002',' ')

select id, case
        when name_2 is null or name_2 = '' or name_2 = ' '
        then name
        else name_2
        end The_name
 from @MyTable

<强>结果: -

1   T001
2   T001X
3   T002

答案 1 :(得分:0)

没有明显的理由说明你不能在视图中做到这一点 - 或者是一个功能。我们的一些观点非常多,有许多这样的条件语句等。唯一的要求是派生列必须给出一个别名。