Inquiridor
Não consigo fazer multiplicação de campos

Pergunta
-
Preciso calcular a pontuação dos produtos vendidos, só que a minha tabela da vendas tem +/- 500 registros, qnd eu faço a multiplicação, me retorna mais de 300.000 registros, isto é, os registros duplicados, triplicados, quadriplicads... e assim vai...
Dados:
[tb_venda]+/- 500 registros
id_venda --numero da venda
Id_produto -- identificador do produto
qnt_venda --qntidade vendida
[tb_pontuacao] todos os produtos com ID e pontuacao
id_produto --identificador do produto
v_ponto -- valor de pontos do produto
a minha query está assim
Select v.qnt_venda*p.v_ponto AS PontoVenda
from tb_venda v
inner join tb_pontuacao p
on v.Id_produto=p.Id_produto
Seguindo essa lógica, era p/ o sql manter a tabela de vendas com 500 registros e me apresentar somente o valor de pontos para cada registros...
O que acontece é triplicação de registros, a consulta fica com mais de 1500 registros.
O que está havendo??
Onde estou errando??
Entedesse a minha dúvida??
Conto com a ajuda de vcs!!!
Todas as Respostas
-
-
-
Eu pensei em fazer algo assim:
While Not EOF
SELECT dd,WorkWeek,BusinessId,InvoiceNumber,ProductName,DistiId,ID_produto,SalesUnits,a from tb_temp2 where a='N'
x= SELECT NR_pontosProduto from TB_pontosProduto where ID_produto=ID_produto(tb_temp2)
y=SalesUnits
@calculo=x*y
update tb_temp2 set a='Y',SalesPoints=@calculo
where dd=dd
AND WorkWeek=WorkWeek
AND BusinessId=BusinessId
AND InvoiceNumber=InvoiceNumber
AND ProductName=ProductName
AND DistiId=DistiId
AND ID_produto=ID_produto
AND SalesUnits=SalesUnits
AND a=a
endmas enm faço idéia como se faz isso dentro do sql
se tiver q usar trigger, ai piorou!!! 8(
-
Marcelo,
Você pode utilizar no SQL Server um While, em último caso também poderá trabalhar com cursor.
Veja os exemplos:
//
Criando a Tabela//Create
Table FICHAINDICE(
NumFichaIndice
Int Not Null,NumItemFichaIndice
Int Not Null,NumFicha
Int Not Null,CodProd Varchar
(25) Not Null,CodRef Varchar
(10) Not Null, CONSTRAINT [PK_FICHAINDICE] PRIMARY KEY CLUSTERED(
[NUMFICHAINDICE]
,[NUMITEMFICHAINDICE]
,[NUMFICHA]
)WITH
FILLFACTOR = 95 ON [PRIMARY]) ON [PRIMARY]/*********************************************/
//
Criando/Alterando a Procedure//Alter
Procedure P_MontarFichaIndiceAs
Set
NoCount OnDeclare
@Contador Int,@Ficha
Int,@NumFicha
Int,@CodProd Varchar
(25),@CodRef Varchar
(10),@NumFichaIndice
Int,@NumItemFichaIndice
IntSet
@Contador=0Set
@Ficha=538Set
@NumFicha=0Set
@CodProd=''Set
@CodRef=''Set
@NumFichaIndice=26141Set
@NumItemFichaIndice=1Truncate
Table FichaIndiceWhile
@Ficha <=(Select Max(NumFicha) From Custo) Begin Select @Contador=Count(ct.CodProd),@CodProd
=ct.CodProd,@NumFicha
=ct.NumFicha,@CodRef
=ctb.CodRef From Custo ct Inner Join CustoTab ctb On ct.codprod=ctb.codprod Where ct.numficha=@Ficha Group By ct.CodProd, ct.NumFicha, ctb.CodRef If @Ficha >= (Select Max(NumFicha) From Custo) Break Else Begin If @Contador >=1 Begin Insert Into FichaIndice Values(@NumFichaIndice, @NumItemFichaIndice, @NumFicha, @CodProd, @CodRef) If (@NumItemFichaIndice) >=1 And (@NumItemFichaIndice) < 51 Begin Set @NumItemFichaIndice=@NumItemFichaIndice+1 End Else If @NumItemFichaIndice = 51 Begin Set @NumItemFichaIndice=1 Set @NumFichaIndice=@NumFichaIndice+1 End End Set @Ficha=@Ficha+1 End End/*********************************************/
//
Executando a Procedure//Exec
P_MontarFichaIndice/*********************************************/
Select
* From FichaIndiceorder
by numfichaIndiceOu
DECLARE
@CONTADOR INT,@CODSEQUENCIALPRODUTO
INTSET
@CONTADOR=1DECLARE
NUMMP_CURSOR CURSOR FORSELECT
* FROM #CODSEQUENCIALPRODUTOOPEN
NUMMP_CURSORWHILE
@CONTADOR <=109Begin
FETCH NEXT FROM NUMMP_CURSOR INTO @CODSEQUENCIALPRODUTO UPDATE CTENTRADA_PQC_RESULTADOS SET CODRELACIONAMENTO = (SELECT TOP 1 PQCx.CODRELACIONAMENTO FROM PQCxME PQCx INNER JOIN CTENTRADA_PQC_RESULTADOS CT ON PQCx.CodSequencialProduto = CT.CODSEQUENCIALPRODUTO WHERE PQCx.CODSEQUENCIALPRODUTO=@CODSEQUENCIALPRODUTO) WHERE CTENTRADA_PQC_RESULTADOS.CODSEQUENCIALPRODUTO=@CODSEQUENCIALPRODUTOEnd
Close
NumMP_CursorDeallocate
NumMP_Cursor