我有一张桌子:

ORG | PONumber |代码价钱

我想从该表中选择所有数据,并计算每个PONumber的代码价格之和:

SELECT
tt1.ORG as 'Organization',
tt1.PONumber as 'PO Number',
tt1.Code as 'Code',
tt1.Price as 'Price',
'SumPrice' = FUNC001(tt1.PONumber)
FROM My_table as tt1


在此过程中,我使用函数FUNC001(tt1.PONumber):

ALTER FUNCTION [dbo].[FUNC001] (@ponumber VARCHAR(MAX))
RETURNS DECIMAL AS BEGIN
DECLARE @p1 DECIMAL ;
SET @p1 = 0.0 ;
SELECT @p1 = @p1 + tt1.Price
FROM My_table as tt1
WHERE tt1.[PO number] = @ponumber
RETURN ROUND(@p1,2,1)
END


问题是:由于执行了SELECT查询,因此该函数每次返回相同PONumber的价格之和,这需要花费大量时间。有没有一种方法可以对查询中的每个PONumber仅执行一次此功能,然后将返回值应用于相同的PONumber?我可以使用一些@parameter,然后检查:PONumber是否已更改->执行函数,否则选择先前的值?

最佳答案

只需尝试:

    SELECT
    tt1.ORG as 'Organization',
    tt1.PONumber as 'PO Number',
    tt1.Code as 'Code',
    tt1.Price as 'Price',
SUM(ROUND(tt1.PricePrice,2,1) as 'SumPrice'

    FROM My_table as tt1 group by tt1.PONumber

关于mysql - 如何为每个分组的选定值选择数据并仅执行一次功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11430173/

10-15 21:17