首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WHERE子句中搜索值整数列别名

如何在WHERE子句中搜索值整数列别名
EN

Database Administration用户
提问于 2019-07-31 11:38:23
回答 1查看 611关注 0票数 0

如何在where子句别名变量中筛选值,

代码语言:javascript
运行
复制
CREATE TABLE BASE_Chq
(
ChequeInvoicePaymentId BIGINT NULL,
ChequeNumber VARCHAR(45) NOT NULL,
Amount MONEY NOT NULL
)

一旦我选择了整个表的值,我得到的结果如下,

代码语言:javascript
运行
复制
SELECT IIf(ChequeInvoicePaymentId IS NULL, 'OWN', 'PARTY') AS ChequeType, ChequeNumber, Amount
BASE_Chq

我想筛选支票类型wise但我有错误,

错误代码:

代码语言:javascript
运行
复制
SELECT IIf(ChequeInvoicePaymentId IS NULL, 'OWN', 'PARTY') AS ChequeType, ChequeNumber, Amount  
FROM BASE_Chq
WHERE (ChequeType = 'PARTY')

如何在where子句中使用别名列进行搜索?

EN

回答 1

Database Administration用户

发布于 2019-07-31 11:43:41

您不能在where子句

中使用别名

无需询问查询的任何部分,就可以这样做:

代码语言:javascript
运行
复制
SELECT IIf(ChequeInvoicePaymentId IS NULL, 'OWN', 'PARTY') AS ChequeType, ChequeNumber, Amount  
FROM BASE_Chq
WHERE (IIf(ChequeInvoicePaymentId IS NULL, 'OWN', 'PARTY') = 'PARTY');

更好的方法是直接对IS NOT NULL进行过滤:

代码语言:javascript
运行
复制
SELECT IIf(ChequeInvoicePaymentId IS NULL, 'OWN', 'PARTY') AS ChequeType, ChequeNumber, Amount  
FROM BASE_Chq
WHERE ChequeInvoicePaymentId IS NOT NULL;

一个小的DB<>Fiddle示例

为什么

where子句中的筛选器可以在计算IIF函数之前作为( SELECT )谓词传递给表。

关于Erland在回答中的处理顺序的更多信息:

您不能这样做,因为SELECT语句是按以下顺序计算的: FROM-JOIN WHERE GROUP BY HAVING SELECT ORDER,所以在计算WHERE子句时,还没有定义SELECT列表中定义的别名。..。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/244211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档