,我有以下的表格:聚合多組序功能
1 X 10
2 X 30
3 Y 5
4 Y 2
...etc
我需要把它變成:
X 300 //(10 * 30)
Y 10 //(5 * 2)
所以我實際上是在尋找一種乘法函數的那我可以使用像sum,avg和東西......這是否存在球員?
例如:
select field2, **multiply**(field3)
from t
group by field2
感謝
,我有以下的表格:聚合多組序功能
1 X 10
2 X 30
3 Y 5
4 Y 2
...etc
我需要把它變成:
X 300 //(10 * 30)
Y 10 //(5 * 2)
所以我實際上是在尋找一種乘法函數的那我可以使用像sum,avg和東西......這是否存在球員?
例如:
select field2, **multiply**(field3)
from t
group by field2
感謝
理想的情況下,訪問SQL將有一個PRODUCT
聚合函數可用,但事實並非如此。但是,我們可以通過記住我們瞭解學校對數(或不...),並記住它模擬的是原木和的反對數等於產品:
SELECT field2, EXP(Sum(LOG(Field3))) AS ProductOfField3
FROM t
GROUP BY Field2
注意,而一個真正的PRODUCT
功能只會針對一組返回0
如果有任何零個值,該解決方案將失敗如果有任何零個值,所以,要當心一點。另外,如果有任何負值,這種方法將不起作用。
爲了解決零,我們可以這樣做:
SELECT
field2,
EXP(Sum(LOG(IIf(Field3 = 0, 1, Field3)))) AS ProductOfField3,
MIN(ABS(Field3)) AS MinOfAbsField3
FROM t
GROUP BY Field2
,然後不顧任何行,其中MinOfAbsField3
爲零ProductOfField3
值(這表明含零一組,因此,「真正的」產品應被0
)
爲了應對負值,我們可以進一步做到這一點:
SELECT
field2,
EXP(Sum(LOG(IIf(Field3 = 0, 1, ABS(Field3))))) AS ProductOfField3,
MIN(ABS(Field3)) AS MinOfAbsField3,
SUM(IIf(Field3 < 0, 1, 0)) AS SumOfNegativeIndicator
FROM t
GROUP BY Field2
和解釋中等的結果與這些規則:
MinOfAbsField3
爲零,無視ProductOfField3
該行 - 該產品是零ProductOfField3
,否定如果SumOfNegativeIndicator
是奇數該行中Public Function ResetProd() As Boolean
Call Prod(Null)
ResetProd = True
End Function
Public Function Prod(nNumber As Variant) As Double
Static nPrevNumber As Double
If IsNull(nNumber) Then
nPrevNumber = 1
Else
nPrevNumber = nPrevNumber * nNumber
End If
Prod = nPrevNumber
End Function
...並使用它們如下:
SELECT PROD(_column_for_wich_you_want_product_) FROM _your_table_
WHERE RESETPROD()
這在理論上看起來不錯,但你真的嘗試過嗎?它並不適合我(某些行不止一次),主要是:它不會聚合。你不能使用GROUP BY。 – Andre 2017-04-01 14:36:23
謝謝AakashM。我嘗試了這種方式,但它不起作用,它一直說「無效的過程調用」,我無法確定錯誤來自哪裏。雖然我確信它不是來自我的查詢的其餘部分,似乎訪問不喜歡EXP(Sum(LOG([X])))或其他。我最終使用了一個交叉表,因爲我最多隻有3列進行乘法運算,但我會將其留作未來需求。 – CoolStraw 2011-03-07 12:43:07
@CoolStraw這是你將得到的錯誤,如果任何值爲零(或負值)。我將更新以指示處理這種情況的一種方式 – AakashM 2011-03-07 12:55:14
gotcha!謝謝 – CoolStraw 2011-03-07 13:11:54