在 WHERE 子句 SQL 中使用别名 [重复]

Posted

技术标签:

【中文标题】在 WHERE 子句 SQL 中使用别名 [重复]【英文标题】:Using Alias in the WHERE Clause SQL [duplicate] 【发布时间】:2015-01-14 15:06:52 【问题描述】:

我要做的是通过使用从案例语句创建的私人福利别名中的 WHERE LienType = 'No Private' 来缩小 from 子句中的查询范围。我该怎么做?

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'

【问题讨论】:

我认为解决他的问题不是重复的,而是查询的重组: SELECT ClientId, ClientFirstName, ClientLastName, CASE WHEN SUM(CASE WHEN LienType = 'Private Lien' THEN 1 ELSE 0 END) > 0 THEN 'Private Yes' ELSE 'Private No' END PrivateBenefits FROM FullProductView FPVA WHERE CaseId = 420 GROUP BY ClientId, ClientFirstName, ClientLastName ORDER BY WHEN SUM(CASE WHEN LienType = 'Private Lien' THEN 1 ELSE 0 END) > 0 THEN ' Private Yes' ELSE 'Private No' END; 【参考方案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'

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

【讨论】:

您将如何构建视图?

以上是关于在 WHERE 子句 SQL 中使用别名 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 OR 子句 SQL 中使用别名 [重复]

SQL语句中,子句不能使用列别名问题

SQL语句中,为啥where子句不能使用列别名,而order by却可以?

在 WHERE 或 GROUP BY 子句中使用列表别名

在SQL中的WHERE和HAVING语句中使用别名?

sql不允许在where子句比较中使用case变量[重复]