我有下表

 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

关于sql - 在T-SQL中乘行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8185873/

10-11 02:46
查看更多