Usuário com melhor resposta
Função similar a função MULT do EXCEL

Pergunta
-
Bom dia,
No SQL Server existe alguma função similar ao MULT do Excel? Ex: =Mult(a1:a7) que também é igual a =a1*a2*a3*a4*a5*a6*a7
Obrigado,
- Movido Gustavo Maia Aguiar quarta-feira, 1 de setembro de 2010 17:12 (De:SQL Server - Desenvolvimento Geral)
Respostas
-
Riley,
Acredito que não, mas você poderia criar um loop para realizar o cálculo, armazenando estes valores em uma tabela temporária, fazendo a varredura dos valores dentro da table.
Veja se este exemplo ajuda:
Create Table #T1 (Codigo Int Identity(1,1), Valor Int) Insert Into #T1 Values (10) Insert Into #T1 Values (20) Insert Into #T1 Values (30) Insert Into #T1 Values (40) Insert Into #T1 Values (50) Insert Into #T1 Values (60) Select * from #T1
Declare @Contador Int, @Valor Int Set @Contador=1 Set @Valor=0 While @Contador <= (Select COUNT(Codigo) from #T1) Begin If @Contador=1 Set @Valor=(Select Valor From #T1 Where Codigo = @Contador) Else Set @Valor=@Valor*(Select Valor From #T1 Where Codigo = @Contador) Set @Contador=@Contador+1 End Select @Valor As 'Resultado'
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
- Marcado como Resposta Jason DBA Jr segunda-feira, 6 de setembro de 2010 12:59
-
Srs.... Apenas um pitaco antes de sair para o feriado... Fazer esse tipo de soma/multiplicação ou como usamos aqui concatenação dá para fazer sem Loop:
/* Multiplicação dos registros */Declare @Valor Int
Set @Valor = 1
Select @Valor = @Valor * Valor From #T1
Select @Valor As 'Resultado'
E caso for Fatoração, dá para usar a spt_values tambem sem Loop.
/* Fatoração */
Declare @n int, @result float
Select @n = 7,@result=1
Select @result = @result * number
From Master..spt_values
Where Type='p'
And Number Between 1 And @nSelect @result
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco- Marcado como Resposta Jason DBA Jr segunda-feira, 6 de setembro de 2010 12:59
-
Bom Dia,
O SQL Server não possui algo nativo em T-SQL. Você pode fazer isso com UDA (User Defined Aggregates) ou com CLR. Já demonstrei alguns cenários com essas técnicas em:
Cálculos financeiros, consultas SQL eo mercado de ações - Parte I
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!361.entryCálculos financeiros, consultas SQL eo mercado de ações - Parte II
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!362.entryCálculos financeiros, consultas SQL eo mercado de ações - Parte III
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!365.entryCom o T-SQL puro, teremos que recorrer aos raciocínios da matemática e "achar" outro caminho. Segue exemplo:
DECLARE @T TABLE (ID INT IDENTITY(1,1), VALOR INT) INSERT INTO @T (VALOR) VALUES (1) INSERT INTO @T (VALOR) VALUES (3) INSERT INTO @T (VALOR) VALUES (6) INSERT INTO @T (VALOR) VALUES (2) INSERT INTO @T (VALOR) VALUES (4) -- Multiplicação SELECT POWER(10.00,SUM(LOG10(VALOR))) As MULT FROM @T -- Multiplicação Acumulada SELECT VALOR, (SELECT POWER(10.00,SUM(LOG10(TInt.VALOR))) As MULT FROM @T As TInt WHERE TOut.ID >= TInt.ID) As MultAcumulada FROM @T As TOut
Para explicações mais detalhadas bem como todas as demais alternativas, a leitura dos artigos é recomendada
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar domingo, 5 de setembro de 2010 14:32
- Marcado como Resposta Jason DBA Jr segunda-feira, 6 de setembro de 2010 12:58
Todas as Respostas
-
Riley,
Acredito que não, mas você poderia criar um loop para realizar o cálculo, armazenando estes valores em uma tabela temporária, fazendo a varredura dos valores dentro da table.
Veja se este exemplo ajuda:
Create Table #T1 (Codigo Int Identity(1,1), Valor Int) Insert Into #T1 Values (10) Insert Into #T1 Values (20) Insert Into #T1 Values (30) Insert Into #T1 Values (40) Insert Into #T1 Values (50) Insert Into #T1 Values (60) Select * from #T1
Declare @Contador Int, @Valor Int Set @Contador=1 Set @Valor=0 While @Contador <= (Select COUNT(Codigo) from #T1) Begin If @Contador=1 Set @Valor=(Select Valor From #T1 Where Codigo = @Contador) Else Set @Valor=@Valor*(Select Valor From #T1 Where Codigo = @Contador) Set @Contador=@Contador+1 End Select @Valor As 'Resultado'
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
- Marcado como Resposta Jason DBA Jr segunda-feira, 6 de setembro de 2010 12:59
-
Riley, Esqueci de perguntar uma coisa, você esta querendo trabalhar com fatores numéricos?
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Srs.... Apenas um pitaco antes de sair para o feriado... Fazer esse tipo de soma/multiplicação ou como usamos aqui concatenação dá para fazer sem Loop:
/* Multiplicação dos registros */Declare @Valor Int
Set @Valor = 1
Select @Valor = @Valor * Valor From #T1
Select @Valor As 'Resultado'
E caso for Fatoração, dá para usar a spt_values tambem sem Loop.
/* Fatoração */
Declare @n int, @result float
Select @n = 7,@result=1
Select @result = @result * number
From Master..spt_values
Where Type='p'
And Number Between 1 And @nSelect @result
Tks. Fausto Fiorese Branco MCTS, MCITP/DBA 2005 | MCITP/DBA 2008 São Paulo - Brasil * http://www.linkedin.com/in/faustobranco- Marcado como Resposta Jason DBA Jr segunda-feira, 6 de setembro de 2010 12:59
-
-
Bom Dia,
O SQL Server não possui algo nativo em T-SQL. Você pode fazer isso com UDA (User Defined Aggregates) ou com CLR. Já demonstrei alguns cenários com essas técnicas em:
Cálculos financeiros, consultas SQL eo mercado de ações - Parte I
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!361.entryCálculos financeiros, consultas SQL eo mercado de ações - Parte II
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!362.entryCálculos financeiros, consultas SQL eo mercado de ações - Parte III
http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!365.entryCom o T-SQL puro, teremos que recorrer aos raciocínios da matemática e "achar" outro caminho. Segue exemplo:
DECLARE @T TABLE (ID INT IDENTITY(1,1), VALOR INT) INSERT INTO @T (VALOR) VALUES (1) INSERT INTO @T (VALOR) VALUES (3) INSERT INTO @T (VALOR) VALUES (6) INSERT INTO @T (VALOR) VALUES (2) INSERT INTO @T (VALOR) VALUES (4) -- Multiplicação SELECT POWER(10.00,SUM(LOG10(VALOR))) As MULT FROM @T -- Multiplicação Acumulada SELECT VALOR, (SELECT POWER(10.00,SUM(LOG10(TInt.VALOR))) As MULT FROM @T As TInt WHERE TOut.ID >= TInt.ID) As MultAcumulada FROM @T As TOut
Para explicações mais detalhadas bem como todas as demais alternativas, a leitura dos artigos é recomendada
[ ]s,
Gustavo Maia Aguiar
http://gustavomaiaaguiar.spaces.live.com
Classifique as respostas. O seu feedback é imprescindível- Sugerido como Resposta Gustavo Maia Aguiar domingo, 5 de setembro de 2010 14:32
- Marcado como Resposta Jason DBA Jr segunda-feira, 6 de setembro de 2010 12:58
-