簡體   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