Usuário com melhor resposta
Criar tabela a partir de Pivot Dinâmico

Pergunta
-
Boa tarde, amigos.
Tenho uma Stored Procedure que executa um Pivot dinâmico em uma das tabelas do banco. Porém, não estou conseguindo mostrá-las na minha aplicação, pois não acontece um select em uma tabela, e não retorna nada no select.
Gostaria de saber se é possível eu passar o retorno dessa procedure para uma tabela temporária. Pode ser até na mesma procedure. Vejam como está atualemente:
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX) DECLARE @ColumnName AS NVARCHAR(MAX) SELECT @ColumnName= ISNULL(@ColumnName + ',','') + QUOTENAME(MES) FROM ( SELECT DISTINCT DATEPART(MONTH, data_saida) AS MES FROM ComprasSaidaMaterial csm WHERE DATEPART(MONTH, data_saida) BETWEEN (DATEPART(MONTH, GETDATE()) - 3) AND (DATEPART(MONTH, GETDATE()) - 1) ) AS COMPRASSAIDA SET @DynamicPivotQuery = N'SELECT IDPRODUTO, PRODUTO, MARCA, ' + @ColumnName + ' FROM ( SELECT csm.id_produto AS IDPRODUTO, cp.descricao AS PRODUTO, cp.marca AS MARCA, DATEPART(MONTH, data_saida) AS MES, SUM(qtde) AS SAIDA FROM ComprasSaidaMaterial csm JOIN ComprasProdutos cp ON cp.id_produto = csm.id_produto WHERE DATEPART(MONTH, data_saida) BETWEEN (DATEPART(MONTH, GETDATE()) - 3) AND (DATEPART(MONTH, GETDATE()) - 1) GROUP BY csm.id_produto, cp.descricao, cp.marca, DATEPART(MONTH, data_saida) ) X PIVOT(SUM (SAIDA) FOR MES IN (' + @ColumnName + ')) AS PVTTable' EXECUTE(@DynamicPivotQuery)
Gostaria de dropar a tabela antes de tudo, e no final repopular essa tabela com o resultado obtido.
Obrigado
Leonardo D'Amato
Respostas
-
Leonardo,
Segue um exemplo...
create table #temp
(
disco char(1),
livre int
)insert #temp
exec xp_fixeddrivesselect disco, livre
from #tempTulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote
- Marcado como Resposta Leonardo N. D'Amato sexta-feira, 12 de setembro de 2014 11:28
-
Leonardo,
Se a quantidade de registros for pequena, você poderá utilizar uma variável do tipo "table". Neste caso, não há I/O em disco e também não é necessário verificar se existe para dropar e recriar a tabela (ou truncar seus dados).
Também passa ser opcional o uso de Transações, já que não há possibilidade de uma consulta concorrente execute um drop table enquanto não foi finalizada a consulta no primeiro contexto por outro usuário.Segue abaixo uma sugestão para adaptar ao seu script T-SQL:
...
DECLARE @RESULTADO TABLE ( IDPRODUTO int,
PRODUTO varchar(50),
MARCA varchar(50),
COLUNA varchar(200) ) INSERT INTO @RESULTADO (IDPRODUTO, PRODUTO, MARCA, COLUNA) EXEC(@DynamicPivotQuery)
...
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Leonardo N. D'Amato sexta-feira, 12 de setembro de 2014 11:28
Todas as Respostas
-
Leonardo,
Segue um exemplo...
create table #temp
(
disco char(1),
livre int
)insert #temp
exec xp_fixeddrivesselect disco, livre
from #tempTulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote
- Marcado como Resposta Leonardo N. D'Amato sexta-feira, 12 de setembro de 2014 11:28
-
Leonardo,
Se a quantidade de registros for pequena, você poderá utilizar uma variável do tipo "table". Neste caso, não há I/O em disco e também não é necessário verificar se existe para dropar e recriar a tabela (ou truncar seus dados).
Também passa ser opcional o uso de Transações, já que não há possibilidade de uma consulta concorrente execute um drop table enquanto não foi finalizada a consulta no primeiro contexto por outro usuário.Segue abaixo uma sugestão para adaptar ao seu script T-SQL:
...
DECLARE @RESULTADO TABLE ( IDPRODUTO int,
PRODUTO varchar(50),
MARCA varchar(50),
COLUNA varchar(200) ) INSERT INTO @RESULTADO (IDPRODUTO, PRODUTO, MARCA, COLUNA) EXEC(@DynamicPivotQuery)
...
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Marcado como Resposta Leonardo N. D'Amato sexta-feira, 12 de setembro de 2014 11:28