Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
>
Use o CASE e gere uma coluna "virtual".
Motta Obrigado pela dica.
Entendi basicamente só não consegui colocar esse case dentro da minha tabela.
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.
>
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
Não entendi.
Faz um exemplo numérico pequeno.
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.
Use o CASE e gere uma coluna "virtual".
Exemplo.