如何在MS SQL Server中加入表函数结果?

克里斯·托普斯基

我有类似以下两个表的东西(但实际有几百万行):

items:
| X | Y |
---------
| 1 | 2 |
| 3 | 4 |
---------

details:
| X | A | B |
-------------
| 1 | a | b |
| 1 | c | d |
| 3 | e | f |
| 3 | g | h |
-------------

我必须将一个表的几行汇总details为另一表的一行,items才能在GridView中显示它们,如下所示:

| items.X | items.Y | details.A | details.B |
---------------------------------------------
| 1       | 2       | a, c      | b, d      |
| 3       | 4       | e, g      | f, h      |
---------------------------------------------

我已经阅读了文档以及相关的问题,并且对GROUP_CONCAT有所了解,但不允许将其安装在客户系统上。因为我没有机会在本地执行此操作,所以我创建了一个存储函数(可以创建该函数),该函数返回带有XA列的表B到目前为止,此功能运行良好,但是我似乎没有将这些列添加到结果集中。

目前,我正在尝试将函数结果与上的查询结合起来items,join-criterion将是X上面示例中-column。我使用AdventureWorks2012数据库做了一个最小的示例,该数据库包含一个dbo.ufnGetContactInformation(@PersonID INT)[Person].[EmailAddress]表上连接的表函数BusinessEntityID

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]因此,我无法使用函数参数选择函数中的特定子集,无论如何,这应该在连接条件中。另外,我无法让函数返回所有行或创建临时表,因为在我的特定情况下,这在时间和空间上都非常缓慢且昂贵。

是否有另一种方法可以使用2个现有表和一个表函数来实现类似目的?

游戏世界

使用申请

交叉应用类似于内部联接,外部应用类似于左联接

SELECT
    [EmailAddress]
    -- , p.[FirstName]
    -- , p.[LastName]
FROM
    [Person].[EmailAddress] e
cross apply
    dbo.ufnGetContactInformation(e.[BusinessEntityID]) p

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章