Sql server 将计算字段连接到另一个表中的字段

Sql server 将计算字段连接到另一个表中的字段,sql-server,Sql Server,我创建了一个名为table_a的变量表,它有两列,Age和Age_Range。年龄的数据类型为整数 下一个阶段是select语句,在该语句中,我将从表_B中提取Order_编号和计算字段。我希望将表_B中的计算字段与表_a中的Age连接起来,以便查看相对于计算字段及其Order编号的范围 我的第一次尝试是: SELECT Order_Number, DATEDIFF(DAY,Order_Date,CAST(GETDATE()AS DATE)) AS Ageing, Age_Range FROM

我创建了一个名为table_a的变量表,它有两列,Age和Age_Range。年龄的数据类型为整数

下一个阶段是select语句,在该语句中,我将从表_B中提取Order_编号和计算字段。我希望将表_B中的计算字段与表_a中的Age连接起来,以便查看相对于计算字段及其Order编号的范围

我的第一次尝试是:

SELECT Order_Number, DATEDIFF(DAY,Order_Date,CAST(GETDATE()AS DATE)) AS Ageing, Age_Range
FROM Table_B LEFT JOIN Table_A ON Table_B.Ageing = Table_A.Age_Range
这不起作用,我明白为什么。通常在Access中,我只需使用计算字段构建第一个查询,然后构建第二个查询,将计算字段与表中的所需字段连接起来。我一直在研究子查询和派生表,我相信它们可以解决我的问题,但我没有任何运气。我知道这是一个基本问题,但我刚刚开始学习SQL


谢谢,您不能这样加入,因为SELECT是在join语句之后执行的。 您可以在此处阅读:

您可以使用交叉应用创建解决方案

SELECT Order_Number
    , T.Ageing
    , A.Age_Range
FROM Table_B AS B
CROSS APPLY (SELECT DATEDIFF(DAY, B.Order_Date, GETDATE())) AS T(Ageing)
LEFT JOIN Table_A AS A
    ON T.Ageing = Table_A.Age_Range

如果不需要代码的美观,请执行:

SELECT Order_Number, DATEDIFF(DAY,Order_Date,CAST(GETDATE()AS DATE)) AS Ageing, Age_Range
FROM Table_B LEFT JOIN Table_A ON DATEDIFF(DAY,Order_Date,CAST(GETDATE()AS DATE)) = Table_A.Age_Range
否则,按照建议使用交叉应用(性能将相同)。顺便说一下,您不需要将getdate()强制转换为date,DATEDIFF将在没有它的情况下工作,因此您可以轻松地这样编写:

SELECT Order_Number, DATEDIFF(DAY,Order_Date,GETDATE()) AS Ageing, Age_Range
FROM Table_B LEFT JOIN Table_A ON DATEDIFF(DAY,Order_Date,GETDATE()) = Table_A.Age_Range