Sql server 传递多个值和聚合结果的T-SQL调用表函数
我有一个Table函数,它根据一个参数返回一组行,如下例所示:Sql server 传递多个值和聚合结果的T-SQL调用表函数,sql-server,aggregate-functions,table-functions,Sql Server,Aggregate Functions,Table Functions,我有一个Table函数,它根据一个参数返回一组行,如下例所示: CREATE FUNCTION fn_get_records (@PARENTID INT) RETURNS @returnTable TABLE ( -- columns returned by the function Id INT NOT NULL, Parent_Id INT NOT NULL, Name VARCHAR(255) NOT NULL ) AS BEGIN -- Thi
CREATE FUNCTION fn_get_records
(@PARENTID INT)
RETURNS @returnTable TABLE
(
-- columns returned by the function
Id INT NOT NULL,
Parent_Id INT NOT NULL,
Name VARCHAR(255) NOT NULL
)
AS
BEGIN
-- This select returns data
INSERT INTO @returnTable (Id, ParentId, Name)
SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID
RETURN
END
我有另一个表,其中包含这些“父Id”的列表,我应该为匹配特定查询的每个父Id调用上一个函数,并聚合所有结果
父ID是通过以下方式检索的
SELECT Parent_Id
FROM Parent_Records
WHERE Country = 'USA'
例如,此选择返回4行。对于每一行,我必须执行我的函数fn\u get\u records
,并将所有结果聚集在一个视图或另一个函数中
有可能吗?
当然,我不想使用游标,因为我需要一些快速的东西,只是一个快速的提示:一个更有效的TVF将是一个单一的语句
CREATE FUNCTION fn_get_records (@PARENTID INT)
RETURNS TABLE
AS
RETURN (
SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID
)
END
然后可以通过交叉应用调用函数。例如:
Select A.*
,B.*
From YourTable A
Cross Apply dbo.fn_get_records (A.SomeIntValue) B
仅供参考:一个更有效的TVF将是一个单一的声明
CREATE FUNCTION fn_get_records (@PARENTID INT)
RETURNS TABLE
AS
RETURN (
SELECT Id, ParentId, Name FROM [whatever] where Parent_Id = @PARENTID
)
END
然后可以通过交叉应用调用函数。例如:
Select A.*
,B.*
From YourTable A
Cross Apply dbo.fn_get_records (A.SomeIntValue) B
我想直到今天我才使用交叉申请声明-D@Raffaeu这是一个伟大的特点。将其视为记录级处理的子程序。谷歌交叉应用和外部应用。学习新东西总是很有趣。我想直到今天我才使用交叉应用语句-D@Raffaeu这是一个伟大的特点。将其视为记录级处理的子程序。谷歌交叉应用和外部应用。学习新东西总是很有趣的。