【问题标题】:joining to tables in a query for ASP.NET C# ~ multi-part-identifier-could-not-be-bound加入 ASP.NET C# 查询中的表 ~ multi-part-identifier-could-not-be-bound
【发布时间】:2015-05-05 14:06:28
【问题描述】:

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

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";

我得到“无法绑定多部分标识符ud.LastName等”

【问题讨论】:

  • 这些字段不再是外部选择中别名表的一部分。只需删除外部selectgroup by 中的udsc 前缀即可。
  • 好吧,错误消失了,但现在当我知道有数据要返回时,它没有给我任何数据......
  • stackoverflow.com/questions/206558/… 请参考这个我认为它会帮助你
  • Aakash,你是说我不应该使用别名?

标签: c# sql asp.net grouping


【解决方案1】:

进行嵌套选择时,别名不会传播到其范围之外。这在查看等效的 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 标识符来解决。

【讨论】:

  • 是的,我使用的是 MS SQL Server / T-SQL,感谢您重新编写的查询。当我这样看时,它就更有意义了。
猜你喜欢
  • 1970-01-01
  • 2022-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多