Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Robson Rodrigues

SQL Composto

Recommended Posts

Boa dia galera.

 

Tenho uma tabela chamado fis_t_c190 nela tem os campos

id_c100,

icms,

base_icms,

valor_icms, etc

 

so que pode ocorrer de ter o mesmo id_c100 em até 5 linhas.

 

Por exemplo

id_c100  ICMS   Base_Icms    Valor_icms
33       12     100,00        12,00
33       18     100,00        18,00
33       7      100,00         7,00

 

 

Como posso fazer para ao inves de ele jogar em varias linhas ele jogar em uma linha so com nomes diferentes, por exemplo

 

 

id_c100 ICMS_1 Base_ICMS_1 Valor_Icms_1 ICMS_2 Base_icms_2 valor_icms_2 ICMS_3 Base_icms_3 Valor_icms_3
33       12     100,00      12,00        18     100,00      18,00        7      100,00       7

 

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

fis_t_c190 
----------
id_c100,
icms,
base_icms,
valor_icms

 

SELECT id_c100,
      SUM(CASE WHEN icms = 7 THEN valor_icms ELSE 0 END) ICMS7,
      MAX(CASE WHEN icms = 7 THEN base_icms ELSE 0 END) BASE7, 
      SUM(CASE WHEN icms = 12 THEN valor_icms ELSE 0 END) ICMS12,       
      MAX(CASE WHEN icms = 12 THEN base_icms ELSE 0 END) BASE12, 
      SUM(CASE WHEN icms = 18 THEN valor_icms ELSE 0 END) ICMS18,
      MAX(CASE WHEN icms = 18 THEN base_icms ELSE 0 END) BASE18 
FROM fis_t_c190
GROUP BY id_c100

 

O problema sera o campo base_icms, talvez o MAX resolva, ou então não exibir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

fis_t_c190 
----------
id_c100,
icms,
base_icms,
valor_icms

 

SELECT id_c100,
      SUM(CASE WHEN icms = 7 THEN valor_icms ELSE 0 END) ICMS7,
      MAX(CASE WHEN icms = 7 THEN base_icms ELSE 0 END) BASE7, 
      SUM(CASE WHEN icms = 12 THEN valor_icms ELSE 0 END) ICMS12,       
      MAX(CASE WHEN icms = 12 THEN base_icms ELSE 0 END) BASE12, 
      SUM(CASE WHEN icms = 18 THEN valor_icms ELSE 0 END) ICMS18,
      MAX(CASE WHEN icms = 18 THEN base_icms ELSE 0 END) BASE18 
FROM fis_t_c190
GROUP BY id_c100

 

O problema sera o campo base_icms, talvez o MAX resolva, ou então não exibir.

 

 

Motta mais uma vez muito obrigado, ficou muito didatico essa forma como você montou, o problema é que o campo icms nem sempre vem com esses valores ou essa sequencia, ou seja, não posso usar ele para o case.

 

Se no começo eu colocar algo como

 

select ROW_NUMBER()

OVER ( ORDER BY id_c100) AS Linha

 

vai criar mais um campo chamado linha com 1,2,3,4

 

sera que se eu fizer isso e der um group by por id_c100 resolve?

 

se sim, tem como voce me passar um exemplo de como ficaria?

 

Obrigado

 

Ou melhor um group by id_c100

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que estou entendendo, eu acredito que isso não poderá ser feito apenas com uma consulta.

Quero dizer que, a melhor forma para a solução para isso, é criando um procedimento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.