Select Dinamico com 2 tabelas

SQL

16/05/2023

Bom dia Pessoal,

No sql é possivel criamos um select dinamico?

Tenho uma tabela que possui várias filiais e para cada filial que o select efetuar a leitura, é possível realizar uma soma em outra tabela criando a coluna com o codigo da filial ficando como se fosse uma tabela de excel ou seja um linha e varias colunas com o codigo das filiais existente na 2ª tabela. Desta maneira quando for criado uma nova filial eu não preciso realizar nenhuma manutenção no fonte pois, a select já estara preparada para isso.


Exemplo:
Tabela para soma conforme o codigo da Filial
SELECT ''''INVESTIMENTO DAS LOJAS 16 A 75'''' AS NOME_IMPOSTO
,SUM(CONVERT(DECIMAL(18, 2), CASE WHEN E2_FILIAL = ''''16'''' THEN E2_VALOR ELSE 0 END)) F_16
,SUM(CONVERT(DECIMAL(18, 2), CASE WHEN E2_FILIAL IN ( ''''02'''', ''''05'''', ''''16'''', ''''30'''', ''''40'''', ''''46'''', ''''51'''', ''''52'''', ''''60'''', ''''70'''', ''''72'''', ''''73'''', ''''75'''', ''''80'''') THEN E2_VALOR ELSE 0 END)) TOTAL

FROM SE2010 WITH(NOLOCK)

WHERE E2_FILIAL IN ( ''''02'''', ''''05'''', ''''16'''', ''''30'''', ''''40'''', ''''46'''', ''''51'''', ''''52'''', ''''60'''', ''''70'''', ''''72'''', ''''73'''', ''''75'''', ''''80'''')
AND E2_NATUREZ BETWEEN ''''706001'''' AND ''''706010''''
AND E2_BAIXA BETWEEN ''''20230501'''' AND ''''20230531''''


Tabela com o código das filiais

SELECT * FROM FLUXO_CADFILIAL
Wanderson Fernandes

Wanderson Fernandes

Curtidas 0

Respostas

Arthur Heinrich

Arthur Heinrich

16/05/2023

Você pode escrever uma rotina que monte a sua query dinamicamente, em uma variável texto e a execute dinamicamente. Mas, para cada banco, a forma de fazer isso é diferente.

Além de queries dinâmicas não serem possíveis, na maioria dos casos, o seu exemplo é mais complexo, já que para cada resultado, deve haver uma combinação de códigos.

No seu exemplo, a coluna total soma todos os valores e poderia ser simplificada:

...
,SUM(CONVERT(DECIMAL(18, 2), CASE WHEN E2_FILIAL = ''''16'''' THEN E2_VALOR ELSE 0 END)) F_16
,SUM(CONVERT(DECIMAL(18, 2), E2_VALOR)) TOTAL
...

Já que ela soma todos os códigos filtrados na cláusula WHERE.
GOSTEI 0
POSTAR