我如何引用 Multi Table From 中的第一个 table?

How do I reference the first table in a Multi Table From?

我正在尝试使用 Multi Table From 语句比较同一 table 的两个不同过滤视图中的所有记录。结果似乎是我所期望的,但是当我尝试加入另一个 table 使用 concat() 创建组合键 SSMS returns 时出现以下错误。

错误:

The multi-part identifier "a.ccustno1" could not be bound.

示例代码:

Select *
  From (Select ccustno AS 'ccustno1' 
          From table1 
         Where orderdate = cast(Getdate() AS Date)) a, 
               (Select ccustno AS 'ccustno2' 
                  From table1 
                 Where (orderdate >= dateadd(day, 0, getdate()))) b
           Join table2 c 
             ON c.custkey = concat(a.ccustno1, b.ccustno2)

上下文和附加问题:

对于结果,我试图在第一个过滤视图中生成所有客户的列表,并与第二个过滤视图中的所有客户内联,以便我可以添加第三个 table,详细说明他们与彼此。第一个 table 是今天(第一个视图)和今天之后(第二个视图)筛选的订单列表。第二个 table 使用纬度和经度来计算径向距离,并根据我们愿意按县为额外订单行驶多远进行过滤。我想使用今天订单的位置来告诉我我们今天可以合理地交付哪些其他现有订单以提高效率。

有更简单的方法吗?

不要使用逗号连接。与显式连接相比,它们以不可预测的顺序发生,在这种情况下,系统试图在 bc 之间执行连接,然后 它应用(逗号) a 与连接 bc.

的结果之间的交叉连接

改用显式交叉连接:

Select *
From (Select ccustno AS ccustno1 
      From table1 
     Where orderdate = cast(Getdate() AS Date)) a
       cross join
           (Select ccustno AS ccustno2 
              From table1 
             Where (orderdate >= dateadd(day, 0, getdate()))) b
       Join table2 c 
         ON c.custkey = concat(a.ccustno1, b.ccustno2)

(我仍然不确定最终加入条件 有意义 ,因为我不希望能够获取两个客户编号(假设我正在解释您的正确命名)并将它们连接在一起以生成客户密钥)