[英]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.