Dynami c SQL Запрос содержит дополнительные строки - PullRequest
1 голос
/ 22 января 2020

У меня есть динамический c SQL Запрос, который предоставляет правильные данные, но у меня появляются дополнительные строки, я не уверен, почему. Запрос такой:

-- Nuke the temp DB if it already exists

IF OBJECT_ID('tempdb..##TBL_TEMP') IS NOT NULL
DROP TABLE ##TBL_TEMP

--Parameter to hold dynamically created SQL Script
declare @sqlquery as nvarchar(max)

--Parameter to hold the Pivoted Column Values
declare @pivotcolumns as nvarchar(max)

--generate list of territories that will become column names
select @pivotcolumns = coalesce(@pivotcolumns + ',','') + quotename(Territory)
from 
(SELECT DISTINCT TERRITORY FROM LiveGAPDetailedBudget 
where res_id = '160') AS X

--select @pivotcolumns

--create dynamic query with all values for pivot at runtime
set @sqlquery = 'SELECT [ProductCategory] AS "Product Category",' + @pivotcolumns +' INTO ##TBL_TEMP
FROM LiveGAPDetailedBudget
PIVOT (MAX([Budget])
FOR [Territory] IN (' + @pivotcolumns +')) AS T WHERE res_id = 160'

--select @sqlquery

--Execute Dynamic Query
EXEC sp_executesql @sqlquery 


--View results in temp table
SELECT * FROM ##TBL_TEMP order by [Product Category] 

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

Output

1 Ответ

0 голосов
/ 22 января 2020

Вы выбираете дополнительные столбцы, которые вам не нужны для поворота.

измените свой запрос на

set @sqlquery = 'SELECT [ProductCategory] AS "Product Category",' 
              + @pivotcolumns 
              + ' INTO ##TBL_TEMP
FROM (
       SELECT [ProductCategory], [Territory], [Budget] 
       FROM   LiveGAPDetailedBudget 
       WHERE  res_id = 160
     ) AS D 
PIVOT (MAX([Budget])
FOR [Territory] IN (' + @pivotcolumns +')) AS T '
...