在SQL Server中使用表值函数

时间:2017-09-28 12:12:51

标签: sql-server

我很抱歉我不擅长英语。

我的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))

1 个答案:

答案 0 :(得分:0)

Table-Valued User-Defined Functions

只需从中选择:

select * from sumofOrder(thangValue, namValue)

另外Using APPLY

  

APPLY运算符允许您为其调用表值函数   查询的外表表达式返回的每一行。该   表值函数充当右输入和外表   表达式充当左输入。评估正确的输入   左输入中的每一行和生成的行被组合起来   最终的输出。 APPLY运算符生成的列的列表   是左侧输入中的列集,后跟列表   右输入返回的列。

修改

SELECT f.*
FROM Sales.SalesOrderHeader s
CROSS APPLY [dbo].[sumofOrder](month(s.OrderDate), year(s.OrderDate)) f