2014-04-10 37 views
0

请你能帮我把这个脚本放到临时表中。我一直在这个小时工作,它不断给我错误。PIVOT和TEMP TABLE

DECLARE @PivotColumnHeaders VARCHAR(MAX) 
    SELECT @PivotColumnHeaders = 
    COALESCE(@PivotColumnHeaders + ',[' + CAST(expansion as varchar(max)) + ']', 
    '[' + CAST(expansio 

    n as varchar(max))+ ']') 

INTO #temp 
FROM (Select distinct expansion from #CD4_VL2) results 


DECLARE @PivotTableSQL NVARCHAR(MAX) 
SET @PivotTableSQL = N' 
select * from 
(
select subjectID,expansion,printableValue1 
from #CD4_VL2) as results 


PIVOT 

(MAX([printableValue1]) 
FOR [expansion] IN (
' + @PivotColumnHeaders + ' 
) 
) as PivotTable 

--order by Performed_Date_And_Time desc 
' 

Execute(@PivotTableSQL) 
+2

什么错误?如果是关于语法的任何事情,你有没有尝试*'打印'@PivotTableSQL'而不是执行'执行',然后检查代码? –

+0

此外(虽然我怀疑这是问题),您应该知道[此警告](http://msdn.microsoft.com/en-us/library/ms189484.aspx):“不要在一个变量中使用SELECT语句连接值(即计算聚合值)可能会出现意外的查询结果,这是因为SELECT列表中的所有表达式(包括分配)不能保证每个输出行只执行一次“ –

+0

根据达米安的评论替代使用突变的COALESCE做'GROUP_CONCAT'就是用'STUFF'和xml,例如这里http://stackoverflow.com/a/11985946/314291 – StuartLC

回答

0

因为你的扩展列摆动的MAX(printableValue1)各自的值现在将与在Expansion列中的数据的名称列。更改此像这样:

DECLARE @PivotColumnHeaders NVARCHAR(MAX) = 'Expansion1, Expansion2, Expansion3'; 

DECLARE @PivotTableSQL NVARCHAR(MAX); 
SET @PivotTableSQL = 
N'select subjectID, ' + @PivotColumnHeaders 
+' from #CD4_VL2 
    PIVOT 
(
    MAX([printableValue1]) 
    FOR [expansion] IN (' + @PivotColumnHeaders + ')) x'; 

Execute(@PivotTableSQL); 

SqlFiddle here