我创建了一个名为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。
由于
答案 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