Como pegar registros repetidos de uma tabela e transferir para tabela B em um unico registro somando os campos valores
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
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
Curtidas 0
Respostas
Rafael Mattos
08/06/2011
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
GOSTEI 0
Silvianysa
08/06/2011
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.
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.
GOSTEI 0
Rafael Mattos
08/06/2011
vc pegaria o retorno do select que eu falei a cima e colocaria nessa outra tabela
GOSTEI 0
Emerson Nascimento
08/06/2011
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.
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.
GOSTEI 0
Silviane Silva
08/06/2011
Emerson e Rafael,
Obrigada pela dica...deu certo.
GOSTEI 0
Silviane Silva
08/06/2011
Emerson e Rafael,
Obrigada pela dica...deu certo.
GOSTEI 0
Silviane Silva
08/06/2011
Ok. Obrigada.
GOSTEI 0