Попробуйте попробовать скалярную функцию (SQL Server 2000 или более поздняя версия).
CREATE FUNCTION dbo.GetOrdersSumByCurrency
(
@SalesPersonID INT, @CurrencyID INT
)
RETURNS DECIMAL(10, 2)
AS
BEGIN
DECLARE @Sum DECIMAL(10, 2)
SELECT @Sum = ISNULL(SUM(SalesAmount), 0) FROM dbo.Orders
WHERE SalespersonID=@SalesPersonID AND CurrencyID = @CurrencyID
RETURN @Sum
END
Затем выполните SQL, такой как этот, чтобы получить результаты (предполагается, что у вас есть отдельная таблица продавцов, или используйте вместо этого SELECT DISTINCT SalesPersonId .... FROM Orders):
SELECT SalesPersonId,
dbo.GetOrdersSumByCurrency(SalesPersonId, 1) AS SumUSD, dbo.GetOrdersSumByCurrency(SalesPersonId, 2) AS SumCAD
FROM SalesPersons
Обязательно запустите планы запросов, чтобы увидеть, работает ли он так, как вам нужно, по сравнению с другими возможностями, предлагаемыми здесь, особенно если вы обрабатываете большое количество данных.