大家好我已经编写了以下程序,根据要求将结果显示为数据
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
列{ {1}}可以是值。
答案 0 :(得分: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)