我有类似以下两个表的东西(但实际有几百万行):
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有所了解,但不允许将其安装在客户系统上。因为我没有机会在本地执行此操作,所以我创建了一个存储函数(可以创建该函数),该函数返回带有X
,A
和列的表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] 删除。
我来说两句