SUM Diferente
23/04/2010
0
Sou novo por aqui, estou com uma grande dificuldade em uma query.
Seguinte tenho uma tabela onde preciso somar um coluna (VALOR), Até aí tudo bem eu poderia simplesmente usar o SUM(), o problema é que existem uma outra coluna (FATOR), que basicamente aplica uma MULTIPLICAÇÃO nos valores anteriores...
Resumindo eu preciso de um SUM "Personalizado", que quando eu passasse um outro parâmetro, ele faria um outro processamento, vamos a um exemplo:
Imaginemos a Tabela:
ITEMS VALOR FATOR
Item1 10 0
Item1 10 0
Item1 0 2
Item1 10 0
Se eu fizesse um Select como esse:
SELECT [ITEM]
,SUM([VALOR])
,SUM([FATOR])
FROM [TRADINGBUS].[dbo].[TESTE]
GROUP BY [ITEM]
Teria esse resultado:
ITEMS VALOR FATOR
Item1 30 2
Porém, eu preciso de um código tipo assim:
SELECT [ITEM]
,SUM_FAZ_CHOVER([VALOR], [FATOR])
,SUM([FATOR])
FROM [TRADINGBUS].[dbo].[TESTE]
GROUP BY [ITEM]
FUNCTION SUM_FAZ_CHOVER(VALOR INT, FATOR INT)
AS
BEGIN
IF(FATOR 0)
MULTIPLICA O SUM DA COLUNA [VALOR] PELO [FATOR]
ELSE
FAZ O SUM "NORMAL"
END IF
END
Dessa forma meu resultado seria:
ITEMS VALOR FATOR
Item1 50 2
Pois a conta seria (10 + 10) * 2 + 10 = 50
Para uma coleção maior...
ITEMS VALOR FATOR
Item1 10 0
Item1 10 0
Item1 0 2
Item1 10 0
Item2 10 0
Item2 0 3
Item2 10 0
Item3 10 0
Item3 10 0
Eu teria:
ITEMS VALOR FATOR
Item1 50 2
Item2 40 3
Item3 20 0
É importante que esse processamento seja feito pelo banco de dados e retorne a coleção já pronta para a aplicação.
É possível criar uma função como esta?
Obrigadão!!!
Thiago Santiago
Posts
23/04/2010
Wilson Junior
SUM( Valor * IIF(Fator = 0, 1, Fator) )
Espero ter colaborado.
23/04/2010
Thiago Santiago
Nem precisa criar função, utilize assim:
SUM( Valor * IIF(Fator = 0, 1, Fator) )
Espero ter colaborado.
Cara, tem certeza que essa parada funciona para SQLServer2005 coloquei no meu código ele nem reconhece "IIF" como palavra reservada... e da erro...
dei uma olhada na net, e tinha uma galera falando que IIF é pro ACCESS... no SQL usa CASE...
mas, valeu pela dica!
abraços!
23/04/2010
Wilson Junior
Espero ter colaborado.
23/04/2010
Thiago Santiago
Nem precisa criar função, utilize assim:
SUM( Valor * IIF(Fator = 0, 1, Fator) )
Espero ter colaborado.
Então... outra coisa... quando utilizo a sua Base.... tenho um problema... a multiplicação é feita sobre o registro da coluna atual... mas na verdade... eu preciso que a multiplicação seja "retroativa"... ou seja.... aplicada as linhas anteriores...
por exemplo....
ITEMS VALOR FATOR
Item1 10 0 ----> Valor = 10
Item1 10 0 ----> Valor = (Valor + Valor) = 20
Item1 0 2 ----> Valor = (2 * Valor) = 40
Item1 10 0 ----> Valor = (Valor + Valor) = 50
Resultado Final.... Valor = 50
Seria isso....
=/
valeu...
23/04/2010
Wilson Junior
Bom, para isto terá mesmo que fazer uma FUNCTION para retornar o valor, pois o SQL simples não tem como acumular os dados de outros registros.
Espero ter colaborado.
18/06/2010
Marcilio Marcon
Clique aqui para fazer login e interagir na Comunidade :)