此查询不断给我多个部分绑定错误

时间:2016-10-17 04:43:24

标签: sql sql-server

我正在开发一个拥有相当大数据库的软件项目。我需要显示从数据库中选择的一些财务数据。

基本上在表TimeEntryDetails中我需要乘以小时*率然后将其与那些工作时间的人分组,然后将这些人归为他们所在城市的人。所以最后我们将总共有墨尔本9999999美元由一起工作这笔金额的人组成。表格以这种方式链接。 BusinessUnit(City) - >资源(人) - > TimeEntry - > TemEntryDetails。

我需要在最后一个表中对财务进行排序。我想如果我内部基于主键/外键加入表,它会起作用。

这是我的疑问:

SELECT TOP (1000) BU.bu_name, RE.resource_name,
TED.[tedetail_invoiced_hours]*TED.[tedetail_invoiced_hours_rate] AS TOTAL,TED.[modified] //This is the date modified

FROM [GasLiteTCM].[dbo].[tblTimeEntryDetail], [GasLiteTCM].[dbo].[tblBU] as BU,[GasLiteTCM].[dbo].[tblResource]

INNER JOIN [GasLiteTCM].[dbo].[tblTimeEntryDetail] as TED ON TED.[tedetail_te_id] = TE.[te_id] 

INNER JOIN [GasLiteTCM].[dbo].[tblTimeEntry] as TE ON TE.[te_resource_id] = RE.[resource_id] 

INNER JOIN [GasLiteTCM].[dbo].[tblResource] as RE ON RE.[resource_businessunit_id] = BU.[bu_id]

WHERE TED.tedetail_invoiced_hours IS NOT NULL AND TED.tedetail_invoiced_hours>0

 ORDER BY modified DESC;

这是错误:

  

消息4104,级别16,状态1,行5多部分标识符   " TE.te_id"无法受约束。 Msg 4104,Level 16,State 1,Line 7 The   多部分标识符" RE.resource_id"无法受约束。消息4104,   16级,状态1,行9多部分标识符" BU.bu_id"可以   不受约束。 Msg 209,Level 16,State 1,Line 13 Ambiguous column   姓名'已修改'。消息4104,级别16,状态1,行21多部分   标识符" TE.te_id"无法受约束。 Msg 4104,Level 16,State 1,   第23行多部分标识符" RE.resource_id"无法受约束。   消息4104,级别16,状态1,行25多部分标识符   " BU.bu_id"无法受约束。 Msg 209,Level 16,State 1,Line 29   不明确的列名称'已修改'。

我在这个论坛上看了很多解决方案,但找不到他们的答案。我感谢任何帮助/建议,因为我还在学习SQL。

1 个答案:

答案 0 :(得分:2)

在创建错误原因之前,您已使用别名[TE]

   INNER JOIN [GasLiteTCM].[dbo].[tblTimeEntryDetail] AS TED
           ON TED.[tedetail_te_id] = TE.[te_id] -- used before it is created
   INNER JOIN [GasLiteTCM].[dbo].[tblTimeEntry] AS TE -- Created here

此外,您将隐式和显式Joins结合起来"RE.resource_id"& "BU.bu_id"错误

这是正确的方法

SELECT TOP (1000) BU.bu_name,
                  RE.resource_name,
                  TED.[tedetail_invoiced_hours] * TED.[tedetail_invoiced_hours_rate] AS TOTAL,
                  TED.[modified]
FROM   [GasLiteTCM].[dbo].[tblBU] AS BU
       INNER JOIN [GasLiteTCM].[dbo].[tblResource] AS RE
               ON RE.[resource_businessunit_id] = BU.[bu_id]
       INNER JOIN [GasLiteTCM].[dbo].[tblTimeEntry] AS TE
               ON TE.[te_resource_id] = RE.[resource_id]
       INNER JOIN [GasLiteTCM].[dbo].[tblTimeEntryDetail] AS TED
               ON TED.[tedetail_te_id] = TE.[te_id]
WHERE  TED.tedetail_invoiced_hours IS NOT NULL
       AND TED.tedetail_invoiced_hours > 0
ORDER  BY modified DESC;