在WHERE子句SQL中使用Alias

时间:2015-01-14 15:06:52

标签: sql sql-server

我尝试做的是通过使用WHERE LienType =' No Private'来缩小from子句中的查询范围。来自case语句创建的Private Benefits别名。我该怎么办?

SELECT DISTINCT ClientId
,ClientFirstName
,ClientLastName
, Case when (select COUNT(*)
              from FullProductView fpvb 
              where fpvb.clientid=fpva.clientid 
              and fpvb.Lientype ='Private Lien') = 0 then 'No Private' 
         else 'Private Yes' end 'Private Benefits'
from fullproductview fpva 
WHERE CaseId = 420
Order By 'Private Benefits'

1 个答案:

答案 0 :(得分:1)

你不能直接。在WHERE子句上使用计算字段的唯一两个选项是使用计算字段或子查询创建视图。我认为创建视图是一种简单的方法。

修改

试试这个:

CREATE VIEW vw_MyView AS
SELECT DISTINCT ClientId
,ClientFirstName
,ClientLastName
, Case when (select COUNT(*)
              from FullProductView fpvb 
              where fpvb.clientid=fpva.clientid 
              and fpvb.Lientype ='Private Lien') = 0 then 'No Private' 
         else 'Private Yes' end 'Private Benefits'
from fullproductview fpva 
WHERE CaseId = 420

然后你可以这样做:

SELECT * from vw_MyView WHERE LienType = 'No Private' Order By 'Private Benefits'

在字段名称上使用空格也不是一个好主意。您需要检查这是否适用于您的数据库引擎(您没有提及)。