2016-01-13 55 views
0

SQL数据透视表和动态SQL的新功能。我有一个表格,我希望使不同的属性成为数据透视表中的列标题,同时还为主数据创建正确的主要类别,并在这些字段中报告分数。问题是我无法获得正确填充的分数或不同的列标题。支持多列动态SQL的数据透视表

我无法使Measure1字段成为列标题,我无法获得分数来填充。使用与Measure1和相关分数相关的正确[度量名称]。感谢您提前提供任何帮助。

Declare @ColumnNames NVARCHAR (MAX) = '' 
Declare @SQL NVARCHAR (MAX)= '' 

Select @ColumnNames += QUOTENAME([Measure1]) + ',' 
From [dbo].[Table1] 

Group By [Measure1] 

SET @ColumnNames = LEFT(@ColumnNames, LEN(@ColumnNames)-1) 
SET @SQL = 
'Select * FROM 
(Select 
    case 
     When [measure1] like ''%lower%'' then ''Lower'' 
     When [measure1] like ''%upper%'' then ''Upper'' 
     When [measure1] like ''%Days%'' then ''Days'' 
     When [measure1] like ''%Occur%'' then ''Occurrences'' 
     When [measure1] like ''%Pred%'' then ''Predicted'' 
     When [measure1] like ''%Ratio%'' then ''Ratio'' 
     end as [Measure1] 
    ,case 
     When [Measure Name] like ''%Tewksbury%'' then ''Stan'' 
     When [Measure Name] like ''%Boston%'' then ''Steve'' 
     When [Measure Name] like ''%Seattle%'' then ''Payton'' 
     When [Measure Name] like ''%Denver%'' then ''Lavell'' 
     When [Measure Name] like ''%Houston%'' then ''Caren'' 
     When [Measure Name] like ''%Hudson%'' then ''Michael'' 
     end as Measure_Category 
    ,[Main ID] AS [Cust ID] 
    ,[Compared to Average] 
    ,[score] 

From 
    [dbo].[Table1] 
) AS BaseData 

PIVOT (
    MAX([Compared to Average]) 
    FOR [measure1] 
    IN (' + @ColumnNames + 

')) AS PivotTable' 



Execute sp_executesql @SQL 

实际结果: enter image description here

期望的结果: enter image description here

关闭了预期的效果: enter image description here

+1

能否请您发布您获得的结果以及您的期望? –

+0

是的,抱歉,我应该包括这个。 –

回答

1

嗯,你@ColumnNames PARAM不匹配,你实际上在做什么在您的数据透视查询中进行选择,因此您可能需要将您的@ColumnNames param更改为某些这样的事情,而不是。

SELECT @ColumnNames = COALESCE(@ColumnNames + ',','') + QUOTENAME([Measure1]) 
FROM (SELECT DISTINCT 
       CASE WHEN [measure1] LIKE '%lower%' THEN 'Lower' 
        WHEN [measure1] LIKE '%upper%' THEN 'Upper' 
        WHEN [measure1] LIKE '%Days%' THEN 'Days' 
        WHEN [measure1] LIKE '%Occur%' THEN 'Occurrences' 
        WHEN [measure1] LIKE '%Pred%' THEN 'Predicted' 
        WHEN [measure1] LIKE '%Ratio%' THEN 'Ratio' 
       END AS [Measure1] 
     FROM [dbo].[Table1] 
     ) t 
WHERE [Measure1] IS NOT NULL 

你可以离开这个。

SET @ColumnNames = LEFT(@ColumnNames, LEN(@ColumnNames)-1)