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

时间:2015-02-03 12:42:53

标签: sql-server

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

下一阶段是一个select语句,我从Table_B中提取Order_Number和计算字段。我想加入Table_B中的计算字段和Table_A中的Age,以便我可以看到该范围与计算字段及其订单号的对比。

我的第一次尝试是:

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。

由于

2 个答案:

答案 0 :(得分:0)

你不能这样加入,因为SELECT是在JOIN语句之后执行的。 您可以在此处阅读:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/70efeffe-76b9-4b7e-b4a1-ba53f5d21916/order-of-execution-of-sql-queries

您可以使用CROSS APPLY

制作解决方法
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

答案 1 :(得分:0)

如果代码之美不是必要的:

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

否则按照建议使用CROSS APPLY(性能将相同)。顺便说一句,你不需要CAST getdate()到目前为止,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