【问题标题】:T-SQL statement with SubSelect and Join - Ambiguous column name error带有 SubSelect 和 Join 的 T-SQL 语句 - 不明确的列名错误
【发布时间】:2013-03-26 22:38:49
【问题描述】:

我花了几个小时研究应该是一个非常简单的 T-SQL 语句的答案。
这是情况。我很想通过帮助台数据库进行报告。我有一个表(呼叫日志),其中包含有关故障单的基本非重复信息和另一个事务表(Asgnmnt),其中包含对不同人员的各种分配以解决问题。我只是想确定 Asgnmnt 表中的最后一个分配,将其与呼叫日志文件链接,并在外部选择中使用该数据来进行更多数据报告。 Asgnmnt 表包含一个名为 HEATSeq 的字段。给定 CallID 的最高 HEATSeq 将是最后一个分配。这是我的 T-SQL 语句和错误。

SELECT
Callid,
Priority,
RecvdDate,
RecvdTime,
ClosedDate,
ClosedTime,
CustID,
CallType,
CallDesc,
HeatSEQ#
FROM
      (Select 
      a.Callid, 
      a.Priority,
      a.RecvdDate,
      a.RecvdTime,
      a.ClosedDate,
      a.ClosedTime,
      a.CustID,
      a.CallType,
      a.CallDesc,
      (select TOP 1 HEATSeq from Asgnmnt f
      WHERE  a.CallID = f.CallID
      ORDER BY HEATSeq desc) as HeatSeq#
      FROM dbo.CallLog a 
      where a.CallID = '00520308') as z
LEFT OUTER JOIN dbo.Asgnmnt c on z.Callid=c.CallID and z.HeatSeq# = c.HEATSeq

这里是[错误]

Msg 209, Level 16, State 1, Line 2
Ambiguous column name 'Callid'.
Msg 209, Level 16, State 1, Line 9
Ambiguous column name 'CallType'

【问题讨论】:

    标签: sql-server tsql calculated-columns ambiguous


    【解决方案1】:

    你可能在 z 和 c 中都有 Callid 和 CallType(至少)。至少为外部查询中的那些列使用表别名:

    SELECT
    z.Callid, -- No longer ambiguous
    z.Priority,
    z.RecvdDate,
    z.RecvdTime,
    z.ClosedDate,
    z.ClosedTime,
    z.CustID,
    z.CallType,
    z.CallDesc,
    z.HeatSEQ#
    FROM
          (Select 
          a.Callid, 
          a.Priority,
          a.RecvdDate,
          a.RecvdTime,
          a.ClosedDate,
          a.ClosedTime,
          a.CustID,
          a.CallType,
          a.CallDesc,
          (select TOP 1 HEATSeq from Asgnmnt f
          WHERE  a.CallID = f.CallID
          ORDER BY HEATSeq desc) as HeatSeq#
          FROM dbo.CallLog a 
          where a.CallID = '00520308') as z
    LEFT OUTER JOIN dbo.Asgnmnt c on z.Callid=c.CallID and z.HeatSeq# = c.HEATSeq
    

    【讨论】:

    • 我想我们越来越近了,但还是有问题。这是新错误:消息 102,级别 15,状态 1,第 1 行“,”附近的语法不正确。消息 156,级别 15,状态 1,第 26 行关键字“as”附近的语法不正确。
    • 我真诚地道歉,你的修复工作很棒。我没有复制语句的 SELECT 部分,一切都很好!!!!!!!非常感谢您的快速回复。
    • @user2174861,太好了。随意投票或标记答案以帮助未来的访问者。
    【解决方案2】:

    您应该使用 FROM 子句中的适当表别名来完全限定外部 SELECT 中的所有列名,例如z.Callid 或 c.Callid。由于您留在 Callid 上,因此结果集中可能存在 z.Callid 不为空但 c.Callid 为空的行。 CallType 也是如此。

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多