为什么我收到此错误?
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
答案 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