Select Dinamico com 2 tabelas
16/05/2023
0
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
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
Curtir tópico
+ 0
Responder
Posts
16/05/2023
Arthur Heinrich
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.
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.
Responder
Clique aqui para fazer login e interagir na Comunidade :)