在 ASP.NET C# ~ 多部分标识符无法绑定的查询中加入表

joining to tables in a query for ASP.NET C# ~ multi-part-identifier-could-not-be-bound

在其他答案中,我查看了以下内容:

The multi-part identifier could not be bound

但是我仍然无法使用该答案进行分组。

以下查询有效:

string query = @"SELECT     
    ud.FirstName, 
    ud.LastName, 
    p.Name AS Product, 
    p.ItemNumber, 
    sc.AmountPurchased * sc.Price AS Total, 
    sc.DatePurchased,
    sc.IsInCart AS [NotShipped]
FROM         
    ShoppingCarts sc INNER JOIN
    UserDetails ud ON sc.ClientID = ud.Guid Left     
OUTER JOIN
    Products p ON sc.ProductID = p.ProductsId

WHERE sc.DatePurchased >= @date1
AND   sc.DatePurchased <= @date2  
AND   sc.IsInCart = @shipped ";

但是当我尝试这样分组时:

string query = @"SELECT ud.LastName, sc.DatePurchased, SUM(Total)
    FROM(
SELECT     
    ud.FirstName, 
    ud.LastName, 
    p.Name AS Product, 
    p.ItemNumber, 
    sc.AmountPurchased * sc.Price AS Total, 
    sc.DatePurchased,
    sc.IsInCart AS [NotShipped]
FROM         
    ShoppingCarts sc INNER JOIN
    UserDetails ud ON sc.ClientID = ud.Guid Left     
OUTER JOIN
    Products p ON sc.ProductID = p.ProductsId
WHERE sc.DatePurchased >= @date1
AND   sc.DatePurchased <= @date2  
AND   sc.IsInCart = @shipped 
) AS result
GROUP BY ud.LastName, sc.DatePurchased";

我得到 "multi-part identifier ud.LastName, etc cannot be bound"

进行嵌套选择时,别名不会传播到它们的范围之外。这在查看等效的 CTE 查询时更为明显(假设您使用的是 MS SQL Server / T-SQL):

;WITH
(
    SELECT     
        ud.FirstName, 
        ud.LastName, 
        p.Name AS Product, 
        p.ItemNumber, 
        sc.AmountPurchased * sc.Price AS Total, 
        sc.DatePurchased,
        sc.IsInCart AS [NotShipped]
    FROM         
        ShoppingCarts sc INNER JOIN
        UserDetails ud ON sc.ClientID = ud.Guid Left     
    OUTER JOIN
        Products p ON sc.ProductID = p.ProductsId
    WHERE sc.DatePurchased >= @date1
    AND   sc.DatePurchased <= @date2  
    AND   sc.IsInCart = @shipped
) AS Result
SELECT 
    LastName, 
    DatePurchased, 
    SUM(Total)
FROM Result
GROUP BY 
    LastName,
    DatePurchased

因此,通过从外部 selectgroup by.

中删除 udsc 标识符,您的问题得到了解决