2014-02-11 5 views
0

Привет всем Я написал следующую процедуру, чтобы отобразить результаты в виде поворота в соответствии с требованиемнеоднозначным колонок ошибка имени SQL Server 2008

DECLARE @values AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

SELECT @values = STUFF(
    (
     SELECT DISTINCT ',[' + ColumnName + ']' 
     FROM xTable 
     FOR xml path ('') 
     ),1,1,'') 

SET @query = 'SELECT viewName1.*, pValues.Code, ' + @values + ' FROM 
      (
       SELECT Column1,Column2, Column3 
       FROM viewname 

      ) aliasName 
      PIVOT 
      (
       MAX(value) 
       FOR ColumnName in (' + @values + ') 
      ) pValues INNER JOIN viewName1 ON pValues.Code = viewname.Code' 
    EXEC(@query) 

Но когда имена значений и столбцов же в моем xTable and viewName1 я получаю эта ошибка, как я могу это решить. Я пробовал увы, но я не получаю ожидаемого результата, поэтому кто-то мне может помочь.

Образец Я имею ColumnName, как TopBrand в моей таблице xTable, это может быть значение в моей viewName1 как для X Колонка TopBrand может быть значение.

+0

Вы получаете неоднозначное имя столбца, потому что 2 из ваших таблиц столбец назван то же, и SQL не знает, какой из них выбрать. Может быть, наложение ваших таблиц, и доступ к столбцам из вашего псевдонима будет работать? – Mez

+0

Привет, имена столбцов, когда я использую 'PIVOT' для преобразования значений в имена столбцов. Я получаю' issue' – demouser

ответ

1

Я думаю, вам нужно иметь отдельный список для FOR и IN статей и бывших должен включать псевдоним:

DECLARE @valuesFor AS NVARCHAR(MAX), 
     @valuesIn AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

SELECT @valuesFor = STUFF(
    (
     SELECT DISTINCT N',pValues.[' + ColumnName + ']' 
     FROM xTable 
     FOR xml path ('') 
     ),1,1,'') 

SELECT @valuesIn = STUFF(
    (
     SELECT DISTINCT N',[' + ColumnName + ']' 
     FROM xTable 
     FOR xml path ('') 
     ),1,1,'') 

SET @query = N'SELECT viewName1.*, pValues.Code, ' + @valuesFor + N' FROM 
      (
       SELECT Column1,Column2, Column3 
       FROM viewname 

      ) aliasName 
      PIVOT 
      (
       MAX(value) 
       FOR ColumnName in (' + @valuesIn + N') 
      ) pValues INNER JOIN viewName1 ON pValues.Code = viewname.Code' 
    EXEC(@query) 
+1

Спасибо 'Szymon' он работал :) – demouser

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