INSERT INTO com GROUP BY

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
carlynhos77
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 172
Registrado em: Seg, 24 Out 2016 7:20 pm

Ola, boa noite... preciso criar um código que faço o seguinte, veja um exemplo de registros:

TABELA_1
codigo nome qtde valor
1 teste 5 1,00
2 teste 2 1,00
1 teste 5 1,00
3 teste 1 1,00

Preciso copiar esses registros para TABELA_2, porém, não quer repetir codigo, quando houver codigo iguais, somar a QTDE

TABELA_2
codigo nome qtde valor
1 teste 10 1,00
2 teste 2 1,00
3 teste 1 1,00

preciso de algo igual acima... tentei esse codigo, mas não deu certo

INSERT INTO TABELA_2 (CODIGO, NOME, QTDE, VALOR)
SELECT CODIGO, NOME, SUM(QTDE), VALOR
FROM TABELA_1 where id_cidade = :g_id_cidade GROUP BY CODIGO;

Alguma dica?
carlynhos77
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 172
Registrado em: Seg, 24 Out 2016 7:20 pm

tentei também com o DISTINCT, mas não filtra

Selecionar tudo

INSERT INTO TABELA_2 (CODIGO, NOME, QTDE, VALOR) 
SELECT [b]DISTINCT CODIGO[/b], NOME, SUM(QTDE), VALOR
FROM TABELA_1 where id_cidade = :g_id_cidade;
carlynhos77
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 172
Registrado em: Seg, 24 Out 2016 7:20 pm

conforme meu exemplo que passei, não consegui resolver da forma q acreditava ser mais facil... mas ai tem o dizer: "O QUE FAZ SAPO PULAR É APERTO" ne

montei assim:

Selecionar tudo

-- CRIAR UMA NOVA BASE DE ITENS

INSERT INTO LIC_LICITACAO_ITENS (CODIGO_ITEM, CODIGO_LICITACAO, NOME_ITEM, UNIDADE_MEDIDA, QUANTIDADE,
                                 NUMERO_LOTE, VALOR_ESTIMADO, NR_ORDEM, ID_CIDADE, CODIGO_FORNECEDOR, SEM_LANCE) 
     
     SELECT CODIGO_ITEM , CODIGO_LICITACAO, DESCRICAO_ITEM, UNIDADE, QUANTIDADE, LOTE, VALOR, NR_ORDEM, ID_CIDADE, :P15_PROPONENTE, 1
         FROM LIC_SOLICXLICIT_ITENS where  id_cidade = :g_id_cidade and 
         CODIGO_LICITACAO = :P15_CODIGO;



-- DELETA ITENS DUPLICADOS

delete from LIC_LICITACAO_ITENS where id_cidade = :g_id_cidade and 
      CODIGO_LICITACAO = :P15_CODIGO and
      CODIGO_FORNECEDOR = :P15_PROPONENTE and rowid not in
     (select min(rowid ) from LIC_LICITACAO_ITENS where 
      id_cidade = :g_id_cidade and 
      CODIGO_LICITACAO = :P15_CODIGO and
      CODIGO_FORNECEDOR = :P15_PROPONENTE  group by CODIGO_ITEM);
      
      

-- ATUALIZA A QUANTIDADE DOS ITENS IMPORTADOS

UPDATE LIC_LICITACAO_ITENS SET  QUANTIDADE  = 
   (SELECT sum(QUANTIDADE) FROM LIC_SOLICXLICIT_ITENS WHERE 
    id_cidade = :g_id_cidade and CODIGO_LICITACAO = :P15_CODIGO and LIC_SOLICXLICIT_ITENS.CODIGO_ITEM = LIC_LICITACAO_ITENS.CODIGO_ITEM) 
    where id_cidade = :g_id_cidade and CODIGO_LICITACAO = :P15_CODIGO and CODIGO_FORNECEDOR = :P15_PROPONENTE;
Editado pela última vez por DanielNN em Qui, 04 Abr 2019 11:49 am, em um total de 1 vez.
Razão: TAG CODE
Responder
  • Informação