【发布时间】:2021-07-07 22:01:24
【问题描述】:
我有如下表格:
Employees : EmployeeId, EmpName , DepartmentId
Transaction: TransactionId, EmployeeId
我有一个返回员工列表的查询:
select * from Employees e
inner join Department d on e.DepartmentId = d.Id
--some other joins
where d.DepartmentId in (@departmentIds)
--other filters
我有一个名为“GetEmployeeCommissionByTransactionId”的“标量”函数,它计算每笔交易的员工佣金并返回该特定交易的“佣金”。
现在我想对交易表进行左连接并在每笔交易上调用“GetEmployeeCommissionByTransactionId”并在最终结果中获得“总佣金”,如下所示:
最终结果集:
EmployeeId EmpName DepartmentId Total Commission
1 John 100 1000
2 Frieda 200 2000
但我对调用该函数然后为每个员工传递多个交易 ID 并计算总佣金有点困惑。
有人可以帮我解决这个问题吗?
函数如下所示:
CREATE FUNCTION [dbo].[GetEmployeeCommissionByTransactionId]
(
@transactionId INT
)
RETURNS Decimal(18,0)
AS
BEGIN
DECLARE @Commission DECIMAL;
-----Logic to calculate commission---------
RETURN @Commission;
End
【问题讨论】:
-
您的问题暗示您的标量函数需要一个表类型参数。如果是这样,那么您无法将数据集传递给它,除非您定义一个正确类型的变量,
INSERT将数据放入所述变量中,然后将其传递给您的函数。如果是这种情况,您应该真正做的是设计一个内联表值函数。 -
您的函数代码定义、您尝试调用它以及一些示例数据以及预期结果都将有助于澄清您的问题。
-
RETURNS Decimal(18,0) - 那么这实际上是
bigint吗? -
(18,0) 表示小数点后 0 位。
declare @x decimal(18,0)=12345.6789; print @x=12346 -
@ILoveStackoverflow 这是一个很大的主题,真的是你需要自学的,官方文档总是一个很好的起点,例如Inline Table Valued Function 和 Using Table Valued Parameters
标签: sql sql-server tsql