2016-08-13 62 views
1

爲什麼我會收到此錯誤?錯誤:列名不明確

Msg 209, Level 16, State 1, Line 94
Ambiguous column name 'New Value'.

查詢:

SELECT 
    aho2.[Control Number] AS [Control Number], 
    STUFF((SELECT '; ' + [Old Value] as [text()] 
      FROM #AuditHistoryOutput aho1 
      WHERE [aho1].[Control Number] = [aho2].[Control Number] 
      FOR XML PATH('')), 1, 1, '') [Unset Choice Value], 
    STUFF((SELECT '; ' + [New Value] as [text()] 
      FROM #AuditHistoryOutput aho2, #AuditHistoryOutput aho1 
      WHERE [aho1].[Control Number] = [aho2].[Control Number] 
      FOR XML PATH('')), 1, 1, '') [Set Choice Value] 
FROM 
    #AuditHistoryOutput aho2 
+1

[不良習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - 在ANSI - ** 92 ** SQL標準中**舊式*逗號分隔的表*樣式列表已替換爲* proper * ANSI'JOIN'語法(**超過20年**前),並且不鼓勵使用它 –

回答

2

使用aho2表的別名兩次更改引用到別的

它看起來像你正在做行字符串conactenation爲分隔分號之一串。但是,如果您查看第二個東西聲明,則使用表別名aho2,然後在最後一個表引用中再次使用它。所以2個引用中的一個需要改變,否則sql-server不知道你引用了哪一個。

但現在我看起來更深了,在第二個select語句中,由於隱式連接組合指定了交叉連接並指定了兩次表,所以現在我們已經遇到了一個問題。我的猜測是,你不希望這是一種可能讓你想要的方式(猜測),但如果不是,你應該使用模式,示例數據和期望的結果來更新你的問題,以便我們能夠更有效地幫助你。

SELECT 
    aho3.[Control Number] AS [Control Number] 
    ,STUFF(
     (SELECT '; '+[Old Value] as [text()] 
     FROM #AuditHistoryOutput aho1 
     WHERE [aho1].[Control Number] = aho3.[Control Number] 
     FOR XML PATH('')) 
     , 1, 1, '') [Unset Choice Value] 
    ,STUFF(
     (SELECT '; '+[New Value] as [text()] 
     FROM #AuditHistoryOutput aho2 
     WHERE [aho2].[Control Number] = aho3.[Control Number] 
     FOR XML PATH('')) 
     , 1, 1, '') [Set Choice Value] 
FROM #AuditHistoryOutput aho3 
+0

我正在嘗試執行行彙總。 – Jeff

+0

看到我的答案更多的解釋。 – Matt

0

「不明確的列名」意味着您有兩個具有相同名稱的表,並且您不指定所需的表。所以[aho1].[New Value][aho2].[New Value]在您的選擇列表中而不是[New Value]將擺脫此錯誤。不能保證你的查詢會起作用。