我很抱歉我不擅长英语。
我的T-SQL功能:
create function sumofOrder(@thang int, @nam int)
returns table
as
return
SELECT
Sales.SalesOrderDetail.SalesOrderID,
Sales.SalesOrderHeader.OrderDate,
SUM(Sales.SalesOrderDetail.OrderQty * Sales.SalesOrderDetail.UnitPrice) AS SubTotal
FROM
Sales.SalesOrderDetail
INNER JOIN
Sales.SalesOrderHeader ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID
GROUP BY
Sales.SalesOrderDetail.SalesOrderID,
Sales.SalesOrderHeader.OrderDate
HAVING
(SUM(Sales.SalesOrderDetail.OrderQty * Sales.SalesOrderDetail.UnitPrice) > 70000)
AND YEAR(Sales.SalesOrderHeader.OrderDate) = @nam
AND MONTH(Sales.SalesOrderHeader.OrderDate) = @thang
现在,我想用它来过滤@thang和@nam而不是任何具体的值。
标量函数示例:
select
[DepartmentID], [Name], dbo.cau1([DepartmentID]) as 'tongnhanvien'
from
[HumanResources].[Department]
谢谢大家!
ps:我的想法是:select * from [dbo].[sumofOrder](MONTH(Sales.SalesOrderHeader.OrderDate), YEAR(Sales.SalesOrderHeader.OrderDate))
答案 0 :(得分:0)
Table-Valued User-Defined Functions
只需从中选择:
select * from sumofOrder(thangValue, namValue)
APPLY运算符允许您为其调用表值函数 查询的外表表达式返回的每一行。该 表值函数充当右输入和外表 表达式充当左输入。评估正确的输入 左输入中的每一行和生成的行被组合起来 最终的输出。 APPLY运算符生成的列的列表 是左侧输入中的列集,后跟列表 右输入返回的列。
修改强>
SELECT f.*
FROM Sales.SalesOrderHeader s
CROSS APPLY [dbo].[sumofOrder](month(s.OrderDate), year(s.OrderDate)) f