繁体   English   中英

乘以t-sql中的行

[英]multiply rows in t-sql

我有下表

 ID     Number    
----------------     
   1       41.5
   2       42.5
   3       43.5
   2       44.5   
   2       45.5
   1       46.5
   1       47.5

我需要编写一个查询,它将返回不同的ID和相应的Number列值相乘。 对于给定的表,结果应该是这样的

ID       Result 
-----------------
  1         41.5 * 46.5 * 47.5
  2         42.5 * 44.5 * 45.5
  3         etc...

(不使用游标)

SELECT Id, EXP(SUM(LOG(Number))) as Result
FROM Scores 
GROUP BY id

这适用于正数,也可以乘以负数,你可以使用ABS()函数来使用绝对(正)值,但最终结果将是正数而不是负数:

SELECT Id, EXP(SUM(LOG(ABS(Number)))) as Result
FROM Scores 
GROUP BY id

编辑:添加测试脚本

DECLARE @data TABLE(id int, number float)

INSERT INTO @data VALUES
(1, 2.2),
(1, 10),
(2, -5.5),
(2, 10)

SELECT Id, EXP(SUM(LOG(ABS(Number)))) as Result 
FROM @data GROUP BY id 

输出:

1   22
2   55

这是行连接的一个细微变化,Jeff Moden在SQL Server Central上有一篇很好的文章,标题为性能调优:连接函数和一些调整神话


编辑:@mellamokb它类似于连接,但需要进行一些修改。 一个示例脚本

create table testMult (id int, num int)

GO

insert into testMult values (1, 2)
insert into testMult values (1, 3)
insert into testMult values (1, 4)
insert into testMult values (2, 2)

GO

create function dbo.fnMult (@someId int)
returns int as 
begin
    declare @return int
    set @return = 1

    select @return = @return * num
    from testMult
    where id = @someId

    return @return
end

GO

select * 
from testMult

select t1.id,
    dbo.fnMult(t1.id) 
from testMult t1
group by t1.id

这只是Jeff Moden在他的文章中提供的脚本的一个非常小的变化。

select id, power(sum(log10(num)),10) group by id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM