此子查询中的错误

Error in this subquery

这个查询:

left join (select tSpent, Customerid
from   (select SUM(spent) as tSpent, Customerid,
        RN = ROW_NUMBER() OVER (PARTITION BY Customerid ORDER BY Customerid DESC)
        from   Customer_Sales
        WHERE Customerid is not null)
              where   RN = 1) Sales ON Customer_Sales.Customerid = Data.Customerid

RN=1 行给我一个错误:

Incorrect syntax near the keyword 'where'

(select tSpent, Customerid
 from (select SUM(spent) as tSpent, Customerid,
        RN = ROW_NUMBER() OVER (PARTITION BY Customerid ORDER BY Customerid DESC)
        from   Customer_Sales
        WHERE Customerid is not null) t --use a alias for the derived table
 where RN = 1) Sales ON Customer_Sales.Customerid = Data.Customerid

不确定为什么要使用 row_number。你还应该 group by customerid.

内部查询可以简化为

select SUM(spent) as tSpent, Customerid
from  Customer_Sales
WHERE Customerid is not null
group by customerid

因为您只是想获得每个客户的总花费。

ROW_NUMBER() 功能是在 SQL Server 2005 中引入的。因此您将无法使用它。正如 vkp 指出的那样,您还缺少子查询的别名,并且您不能在 WHERE 子句中使用刚刚在 SELECT 中分配的别名(过滤发生在 select 之前,基本上)。