2014-02-11 74 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同我收到那個錯誤我怎麼解決這個問題。我嘗試了唉,但我沒有得到預期的結果,所以有人能幫助我。

樣品是我有我的表xTable一個ColumnName作爲TopBrand,這可能是像TopBrandX列可以是一個值在我viewName1的值。

+0

你得到一個不明確的列名,因爲你的表2已列命名同樣,SQL不知道選擇哪一個。也許別名表,並從您的別名訪問列將工作? – Mez

+0

當我使用'PIVOT'將值轉換爲列名稱時,不是列名稱我得到'問題' – demouser

回答

1

我認爲你需要有FORIN條款和前一個單獨的列表應該包括別名:

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