如何为每个分组的选定值选择数据并执行一次功能

时间:2012-07-11 10:02:11

标签: mysql sql ado.net

我有一张桌子:

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查询执行,此函数每次返回相同PONumbers的价格总和,并且需要花费大量时间。有没有办法在查询中为每个PONumber执行一次此函数并为相同的PONumber应用返回值?我可以使用一些@parameter,并检查:如果PONumber发生变化 - >执行函数,否则选择以前的值?

1 个答案:

答案 0 :(得分:1)

试试这个::

    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