在 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
因此,通过从外部 select
和 group by
.
中删除 ud
和 sc
标识符,您的问题得到了解决
在其他答案中,我查看了以下内容:
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
因此,通过从外部 select
和 group by
.
ud
和 sc
标识符,您的问题得到了解决