我有2列的表:如何在SQL Server計算聚合產品功能
No. Name Serial
1 Tom 1
2 Bob 5
3 Don 3
4 Jim 6
我要添加的內容是這樣的乘法串行列列:
No. Name Serial Multiply
1 Tom 2 2
2 Bob 5 10
3 Don 3 30
4 Jim 6 180
我怎樣才能做到這一點?
我有2列的表:如何在SQL Server計算聚合產品功能
No. Name Serial
1 Tom 1
2 Bob 5
3 Don 3
4 Jim 6
我要添加的內容是這樣的乘法串行列列:
No. Name Serial Multiply
1 Tom 2 2
2 Bob 5 10
3 Don 3 30
4 Jim 6 180
我怎樣才能做到這一點?
哦,這是一個痛苦。大多數數據庫不支持product
聚合函數。你可以用日誌和權力模擬它。所以,這樣的事情可能工作:
select t.*,
(select exp(sum(log(serial)))
from table t2
where t2.no <= t.no
) as cumeProduct
from table t;
注意log()
可能在一些數據庫被稱爲ln()
。此外,這適用於正數數字。處理負數和零的方法各不相同,但這使答案變得複雜(並且樣本數據都是正數)。
@TommySayugo - 不,您可以在查詢中多次引用* same *表。當你這樣做的時候,你應該使用* aliases *('t','t2')來表示你指的是哪個表的實例。 –
創建CLR聚合並不是那麼糟糕。我在5分鐘內颳起這件事:
[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(Format.Native)]
public struct Product
{
private SqlDouble _p;
public void Init()
{
this._p = new SqlDouble(1);
}
public void Accumulate(SqlDouble Value)
{
this._p *= Value;
}
public void Merge (Product Group)
{
this._p *= Group._p;
}
public SqlDouble Terminate()
{
// Put your code here
return _p;
}
}
一旦你得到了,你可以使用通常用於運行和技術(即三角形連接或爲界行,根據窗口定義你的sql版本)。
乘積列的確切計算方式是什麼? – kojow7
您不應將計算列存儲在數據庫中。相反,請創建一個嵌套的select語句來爲您計算值。 – kojow7