2016-08-13 4 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 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (** более 20 лет **) назад), и его использование не рекомендуется –

ответ

2

использовать псевдоним aho2 таблицы дважды изменить одну из ссылок на что-то другое

это выглядит, как вы делаете строки conactenation строк в запятой с разделителями строка. Но если вы посмотрите в своем втором заявлении материала, вы используете псевдоним таблицы aho2, а затем снова используете его в последней таблице. Таким образом, одна из двух ссылок должна быть изменена, иначе sql-сервер не знает, к какому из них вы ссылаетесь.

Но теперь, когда я смотрю глубже, у вас также есть проблема во втором предложении выбора, что у вас есть кросс-соединение, указанное из-за неявного соединения 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 
+0

Я пытаюсь выполнить свертку строк. – Jeff

+0

см. Мой ответ для более подробного объяснения. – Matt

0

«Неоднозначное название столбца» означает, что у вас есть две таблицы с тем же именем, и вы не укажете, какую таблицу вы хотите. Таким образом, [aho1].[New Value] или [aho2].[New Value] в выбранном вами списке вместо [New Value] избавится от этой ошибки. Невозможно обещать, что ваш запрос будет работать.

Смежные вопросы