错误:列名称不明确

时间:2016-08-13 18:13:24

标签: sql sql-server

为什么我收到此错误?

  

Msg 209,Level 16,State 1,Line 94
  不明确的列名称“新值”。

查询:

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 个答案:

答案 0 :(得分:2)

您使用aho2表别名两次将其中一个引用更改为其他内容

看起来你正在将行字符串连接到半冒号分隔的字符串。但是如果你查看你的第二个东西语句,你使用表别名aho2,然后在最后一个表引用中再次使用它。因此,2个引用中的一个需要更改,否则sql-server不知道您正在引用哪个。

但是现在我看得更深,你在第二个select语句中也有一个问题,即由于隐式连接sytax和指定表两次而指定了交叉连接。我的猜测是你不希望这里有一种方式(猜测)可能让你想要你想要但如果不是你应该用模式,示例数据和期望的结果更新你的问题,这样我们就可以更有效帮助你。

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