Como pegar registros repetidos de uma tabela e transferir para tabela B em um unico registro somando os campos valores
08/06/2011
0
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
Posts
08/06/2011
Rafael Mattos
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
08/06/2011
Silvianysa
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.
08/06/2011
Rafael Mattos
10/06/2011
Emerson Nascimento
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.
Clique aqui para fazer login e interagir na Comunidade :)