Создание сводной таблицы с использованием динамических переменных из представления - PullRequest
0 голосов
/ 15 января 2019

Нужна помощь в названии. Когда я жестко кодирую Scenario1 как «ACT», сводная таблица работает, как показано в «Script1» . "Script2" - моя попытка его динамической настройки (которая, конечно, не работает). Любая помощь приветствуется!

script1

SELECT
      year,
       GRP_LEVEL,
       ACT

FROM  

(SELECT
       Scenario1,
       year,
       GRP_LEVEL,
       TotalAmount
FROM    
[dbo].[VW_exp_by_dept1]) b

PIVOT  
(SUM (TotalAmount) FOR Scenario1 IN (ACT)) piv 

GROUP BY 

      year,
       GRP_LEVEL,
      ACT

--ORDER BY GRP_LEVEL 
GO

"Скрипт2"

DECLARE @ScenarioA AS varchar (50); 
SET @ScenarioA = 'ACT';
(
SELECT
      year,
       GRP_LEVEL,
       @ScenarioA

FROM  

(SELECT
       Scenario1,
       year,
       GRP_LEVEL,
       TotalAmount
FROM    
[dbo].[VW_exp_by_dept1]) b

PIVOT  
(SUM (TotalAmount) FOR Scenario1 IN (@ScenarioA)) piv )

GROUP BY 
      year,
       GRP_LEVEL,
      ScnearioA


--ORDER BY GRP_LEVEL 
GO

Спасибо!

1 Ответ

0 голосов
/ 15 января 2019

возможность использования динамического SQL. Вы строите строку, которая включает ваш SQL-запрос, и выполняете его. Примером может быть:

DECLARE @ScenarioA AS varchar (50);
DECLARE @DynamicQuery as varchar(MAX);

SET @ScenarioA = 'ACT';

SET @DynamicQuery = '
SELECT
      year,
       GRP_LEVEL,'
       + CAST(@ScenarioA as varchar) + '
FROM  
(SELECT
       Scenario1,
       year,
       GRP_LEVEL,
       TotalAmount
FROM    
[dbo].[VW_exp_by_dept1]) b
PIVOT  
(SUM (TotalAmount) FOR Scenario1 IN (' + CAST(@ScenarioA as varchar) + ')) piv 
GROUP BY 
      year,
       GRP_LEVEL, '
      + CAST(@ScenarioA as varchar) + '
--ORDER BY GRP_LEVEL'

EXEC(@DynamicQuery)
...