我有一张桌子:
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发生变化 - >执行函数,否则选择以前的值?
答案 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