Sql server 无法绑定SQL Server 2012多部分标识符

Sql server 无法绑定SQL Server 2012多部分标识符,sql-server,Sql Server,我有4张桌子,我将参加Adventureworks 2012。我不明白为什么会出现“无法绑定错误” Msg 4104,16级,状态1,第7行 无法绑定多部分标识符“Production.ProductCategory.Name” Msg 4104,16级,状态1,第1行 无法绑定多部分标识符“Production.ProductCategory.Name” 选择 将(WorkOrderID)计数为TotalWorkOrders, [产品].[产品类别].[名称] 来自【生产】【工单】工单 工单上

我有4张桌子,我将参加Adventureworks 2012。我不明白为什么会出现“无法绑定错误”

Msg 4104,16级,状态1,第7行

无法绑定多部分标识符“Production.ProductCategory.Name”

Msg 4104,16级,状态1,第1行

无法绑定多部分标识符“Production.ProductCategory.Name”

选择
将(WorkOrderID)计数为TotalWorkOrders,
[产品].[产品类别].[名称]
来自【生产】【工单】工单
工单上的内部联接[Production].[Product]P.[ProductID]=P.[ProductID]
PS上的内部联接[Production].[ProductSubcategory]PS.[ProductSubcategory ID]=P.[ProductSubcategory ID]
PC上的内部联接[Production].[ProductCategory]PC.[ProductCategoryID]=PS.[ProductCategoryID]

其中WO.[StartDate]>='1999-03-08'和WO.[StartDate]您应该使用列列表中的别名:

SELECT
    COUNT(WorkOrderID) AS TotalWorkOrders, 
    PC.[Name]
FROM [Production].[WorkOrder] WO
INNER JOIN [Production].[Product] P ON WO.[ProductID] = P.[ProductID]
INNER JOIN [Production].[ProductSubcategory] PS ON PS.[ProductSubcategoryID] = P.[ProductSubcategoryID]
INNER JOIN [Production].[ProductCategory] PC ON PC.[ProductCategoryID] = PS.[ProductCategoryID]
WHERE WO.[StartDate] >= '1999—03-08' AND WO.[StartDate] <= '2008-05-02'
GROUP BY PC.[Name]
选择
将(WorkOrderID)计数为TotalWorkOrders,
电脑[名称]
来自【生产】【工单】工单
工单上的内部联接[Production].[Product]P.[ProductID]=P.[ProductID]
PS上的内部联接[Production].[ProductSubcategory]PS.[ProductSubcategory ID]=P.[ProductSubcategory ID]
PC上的内部联接[Production].[ProductCategory]PC.[ProductCategoryID]=PS.[ProductCategoryID]

其中WO.[StartDate]>='1999-03-08'和WO.[StartDate]当您以错误的方式在查询中使用模式([Production])时,有时会发生此错误

例如,如果您编写:

select [Production].[ProductCategory].[Name]
from [Production].[WorkOrder] WO
您将得到错误

在这种情况下,将其更改为:

select [ProductCategory].[Name]
from [Production].[WorkOrder] WO

您的查询为表
[Production].[ProductCategory]
提供了别名
PC
。您需要在查询的其余部分使用此选项:

SELECT COUNT(WO.WorkOrderID) AS TotalWorkOrders, 
       PC.[Name]
FROM [Production].[WorkOrder] WO
     INNER JOIN [Production].[Product] P ON WO.[ProductID] = P.[ProductID]
     INNER JOIN [Production].[ProductSubcategory] PS ON PS.[ProductSubcategoryID] = P.[ProductSubcategoryID]
     INNER JOIN [Production].[ProductCategory] PC ON PC.[ProductCategoryID] = PS.[ProductCategoryID]
WHERE WO.[StartDate] >= '1999—03-08' AND WO.[StartDate] <= '2008-05-02'
GROUP BY PC.[Name];
选择计数(工单工单里德)作为总工单,
电脑[名称]
来自【生产】【工单】工单
工单上的内部联接[Production].[Product]P.[ProductID]=P.[ProductID]
PS上的内部联接[Production].[ProductSubcategory]PS.[ProductSubcategory ID]=P.[ProductSubcategory ID]
PC上的内部联接[Production].[ProductCategory]PC.[ProductCategoryID]=PS.[ProductCategoryID]

其中WO.[StartDate]>='1999-03-08'和WO.[StartDate]请在group BYCLASSION中写入PC.[name]..bcoz您已经为表product.PRODUCTCATEGORE指定了PC别名。因此必须在必要时使用别名PC来定义查询中产品类别表的所有列。

我刚刚发现了这一点,并打算删除我的问题,非常感谢
SELECT COUNT(WO.WorkOrderID) AS TotalWorkOrders, 
       PC.[Name]
FROM [Production].[WorkOrder] WO
     INNER JOIN [Production].[Product] P ON WO.[ProductID] = P.[ProductID]
     INNER JOIN [Production].[ProductSubcategory] PS ON PS.[ProductSubcategoryID] = P.[ProductSubcategoryID]
     INNER JOIN [Production].[ProductCategory] PC ON PC.[ProductCategoryID] = PS.[ProductCategoryID]
WHERE WO.[StartDate] >= '1999—03-08' AND WO.[StartDate] <= '2008-05-02'
GROUP BY PC.[Name];