如何在 SQL where 子句中引用 Alias 变量?

问题描述 投票:0回答:1

我正在处理一个需要使用两个不同表中的标志的查询。我做了左连接来获取列,但别名不能在 where 子句中使用。

为什么 ZH021ProcessedFlag 可以工作,但 ImportReady 标志无法读取?我尝试在变量周围使用单引号,但没有输出记录。

任何有关此问题的帮助将不胜感激!

SELECT rb.TransID, rb.TriggerInstanceID, rb.InstanceID as InstanceID, rb.SubmissionID,EventNumber,nb.SubmissionType as SubmissionType,EventSequenceNumber,FTE,Allocation,EventBudgetFund,EventBudgetUnit,EventBudgetDepartment,EventBudgetObjectID,EventBudgetActivity,EventBudgetFunction,EventBudgetPercent,nb.ZH021ProcessedFlag as ZH021ProcessedFlag,ZH022ProcessedFlag,nb.ImportReady as ZH21ImportReady,rb.ImportReady as ZH22ImportReady FROM [dbo].[EventNumberRequestBudget] rb LEFT JOIN dbo.EventNumberRequest nb on nb.InstanceID = rb.InstanceIDWHERE 'ZH22ImportReady' = '0' AND 'ZH21ImportReady' = '0' AND ZH021ProcessedFlag = '0' AND  ZH022ProcessedFlag = '0';
sql sql-server alias
1个回答
0
投票

逻辑上 SELECT 出现在 WHERE 之后,因此别名尚不可用。您可以将查询推送到子查询或 CTE 中,并在外部查询中引用列别名。例如

with q as
(
SELECT 
  rb.TransID, 
  rb.TriggerInstanceID, 
  rb.InstanceID as InstanceID, 
  rb.SubmissionID, 
  EventNumber, 
  nb.SubmissionType as SubmissionType, 
  EventSequenceNumber, 
  FTE, 
  Allocation, 
  EventBudgetFund, 
  EventBudgetUnit, 
  EventBudgetDepartment, 
  EventBudgetObjectID, 
  EventBudgetActivity, 
  EventBudgetFunction, 
  EventBudgetPercent, 
  nb.ZH021ProcessedFlag as ZH021ProcessedFlag, 
  ZH022ProcessedFlag, 
  nb.ImportReady as ZH21ImportReady, 
  rb.ImportReady as ZH22ImportReady 
FROM 
  [dbo].[EventNumberRequestBudget] rb 
  LEFT JOIN dbo.EventNumberRequest nb 
     on nb.InstanceID = rb.InstanceID 
)
select *
from q
WHERE ZH21ImportReady = '0' 
  AND ZH021ProcessedFlag = '0' 
  AND ZH022ProcessedFlag = '0';

© www.soinside.com 2019 - 2024. All rights reserved.