2016-01-13 2 views
0

Новое в SQL Pivot и Dynamic 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 парам не соответствует тому, что вы на самом деле выбрав в сводном запросе, чтобы вы могли захотеть изменить свой параметр @ColumnNames на некоторые вместо этого.

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) 
Смежные вопросы