Como pegar registros repetidos de uma tabela e transferir para tabela B em um unico registro somando os campos valores

08/06/2011

0

Olá Pessoal,   Sou iniciante no Sql   e estou precisando de uma ajuda para entregar uma tarefa no SQL.   Preciso fazer um IF da seguinte forma:   Estou criando uma procedure da seguinte forma:

insert into NOVA_TABELA (tabela de destino)(ACCT_CD,EXT_SEC_ID,LONG_SHT_CD,QTY_SOD,MKT_VAL_SOD,PLEDGED_QTY)

Select
ISIN,
case [Classe Operação]
when'C' then 'L'
when'V then 'S'
when'T' then 'L'
when'D' then 'L
end'[classe operação]
([Qtde. Disponível] +[Qtde. Garantia]) AS TOTAL,
([Valor Find. Isp.] + [Valor Finem. Gar]) AS TOTAL2,
[Qtde. Garantia]


FROM XML_Acoes(tabela de Origem)

Só que agora preciso colocar aquela validação descrita a abaixo:

Se o ID_fundo for igual o campo ISIN, deverá incluir na Tabela de destino apenas um registro somando os campos valores, exemplo:

Forma que esta na tabela XML(Origem)

Id_fundo ISIN LONG_SHT_CD QTY_SOD MKT_VAL_SOD PLEDGED_QTY
------------ ------ ------- ------------- ---------- --------- ----- --------------- -----
Inst AMAR3 L 100 100 0
Inst AMAR3 L 50 50 50
Tarp AMAR6 L 400 800 400




Deverá inserir na Tabela NOVA(Destino) assim:

Inst AMAR3 L 150 150 50
Tarp AMAR6 L 400 800 0 



Não sei se o IF é o mas viável....mesmo...   Aguardo retorno...   Agradeço desde já pela atenção. SAS  
Silvianysa

Silvianysa

Responder

Posts

08/06/2011

Rafael Mattos

vc tem que utilizar funções de agração no caso o sum que é de soma


select id_fundo, isin, long_sht_cd, sum(qty_sod), sum(mkt_val_sod), sum(pledged_qty) from TABELA
group by id_fundo, isin, long_sht_cd

Responder

08/06/2011

Silvianysa

Olá Rafael,   Não deu certo. Deixa ser mas clara na questão:   Estou criando uma procedure da seguinte forma Insert/Select:

insert into NOVA_TABELA (tabela de destino)(ACCT_CD,EXT_SEC_ID,LONG_SHT_CD,QTY_SOD,MKT_VAL_SOD,PLEDGED_QTY)

Select
ISIN,
case [Classe Operação]
when'C' then 'L'
when'V then 'S'
when'T' then 'L'
when'D' then 'L
end'[classe operação]
([Qtde. Disponível] +[Qtde. Garantia]) AS TOTAL,
([Valor Find. Isp.] + [Valor Finem. Gar]) AS TOTAL2,
[Qtde. Garantia]


FROM XML_Acoes(tabela de Origem)


Só que agora preciso colocar aquela validação descrita a abaixo:

Se o ID_fundo for igual o campo ISIN (campos da Tabela de Origem), deverá incluir na Tabela de destino apenas um registro somando os campos valores, exemplo:



tabela XML(Origem)

Id_fundo ISIN LONG_SHT_CD QTY_SOD MKT_VAL_SOD PLEDGED_QTY
------------ ------ ------- ------------- ---------- --------- ----- --------------- -----
Inst AMAR3 L 100 100 0
Inst AMAR3 L 50 50 50
Tarp AMAR6 L 400 800 400



Deverá inserir na Tabela NOVA(Destino) assim:

Inst AMAR3 L 150 150 50
Tarp AMAR6 L 400 800 0
  Agradeço desde já pela ajuda.   Aguardo retorno.
 
Responder

08/06/2011

Rafael Mattos

vc pegaria o retorno do select que eu falei a cima e colocaria nessa outra tabela
Responder

10/06/2011

Emerson Nascimento

o que o Rafael está dizendo é que você precisa agrupar o resultado.

algo assim:

Select
  ID_FUNDO,
  ISIN,
  case when [Classe Operação] = 'V'
    then then 'S'
    else 'L'
  end [classe operação],
  sum(([Qtde. Disponível] + [Qtde. Garantia])) AS TOTAL,
  sum(([Valor Find. Isp.] + [Valor Finem. Gar])) AS TOTAL2,
  sum([Qtde. Garantia]) [Qtde. Garantia]
FROM
  XML_Acoes(tabela de Origem)
GROUP BY
  ID_FUNDO, ISIN, 2

talvez haja algum erro de sintaxe, mas basicamente é isso.

Responder

22/06/2011

Silviane Silva

Emerson e Rafael,   Obrigada pela dica...deu certo.
Responder

24/06/2011

Silviane Silva

Emerson e Rafael,   Obrigada pela dica...deu certo.
Responder

24/06/2011

Silviane Silva

Ok. Obrigada.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar