模糊列名错误sql server 2008

时间:2014-02-11 10:27:35

标签: 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中的TopBrandxTable,这可能是我viewName1X列的值TopBrand列{ {1}}可以是值。

1 个答案:

答案 0 :(得分: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)