如何在MS SQL Server中使用表函数连接结果?
我有两个类似的表(但实际有数百万行): 我必须将一个表的多行如何在MS SQL Server中使用表函数连接结果?,sql,sql-server,function,join,Sql,Sql Server,Function,Join,我有两个类似的表(但实际有数百万行): 我必须将一个表的多行详细信息汇总到另一个表的一行项目,以便在网格视图中显示它们,如下所示: | items.X | items.Y | details.A | details.B | --------------------------------------------- | 1 | 2 | a, c | b, d | | 3 | 4 | e, g | f, h |
详细信息
汇总到另一个表的一行项目
,以便在网格视图中显示它们,如下所示:
| items.X | items.Y | details.A | details.B |
---------------------------------------------
| 1 | 2 | a, c | b, d |
| 3 | 4 | e, g | f, h |
---------------------------------------------
我已经阅读并了解了相关问题,但不允许在客户系统上安装。因为我没有机会以本机方式执行此操作,所以我创建了一个存储函数(允许我创建),它返回一个包含X
、a
和B
列的表。到目前为止,该函数运行良好,但我似乎没有将这些列添加到结果集中
目前,我正试图通过查询项
,将函数结果连接起来,连接条件将是上述示例中的X
-列。我用AdventureWorks2012数据库做了一个简单的例子,它包含一个表函数dbo.ufnGetContactInformation(@PersonID INT)
,用于连接BusinessEntityID
上的[Person].[EmailAddress]
表:
SELECT
[EmailAddress]
-- , p.[FirstName]
-- , p.[LastName]
FROM
[Person].[EmailAddress] e
INNER JOIN
dbo.ufnGetContactInformation(e.[BusinessEntityID]) p
ON p.[PersonID] = e.[BusinessEntityID]
2条注释行表示我在实际中尝试执行的操作,但如果未注释,则隐藏了我得到的实际错误:
Event 4104, Level 16, Status 1, Line 6
The multi-part identifier 'e.BusinessEntityID' could not be bound.
我理解,在加入过程中,e.[BusinessEntityID]
还没有任何价值。因此,我无法使用函数参数在函数中选择特定子集,这应该在联接条件中。此外,我不能让函数返回所有行或创建临时表,因为在我的特定情况下,这在时间和空间方面都非常缓慢和昂贵
有没有其他方法可以通过两个现有表和一个表函数实现类似的功能?使用Apply
交叉应用类似于内部连接,外部应用类似于左连接
SELECT
[EmailAddress]
-- , p.[FirstName]
-- , p.[LastName]
FROM
[Person].[EmailAddress] e
cross apply
dbo.ufnGetContactInformation(e.[BusinessEntityID]) p
谢谢这正是我要找的。
SELECT
[EmailAddress]
-- , p.[FirstName]
-- , p.[LastName]
FROM
[Person].[EmailAddress] e
cross apply
dbo.ufnGetContactInformation(e.[BusinessEntityID]) p