我有(按实际价值不过几百万行)像这2个表:如何在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 |
---------------------------------------------
我已经读过this和相关的问题,我知道GROUP_CONCAT,但我不允许客户系统上安装它。因为我没有机会在本地执行此操作,所以我创建了一个存储函数(我可以创建该函数),该函数返回一个表,其中列X
,A
和B
。此功能迄今为止工作正常,但我似乎没有将这些列添加到我的结果集。
目前我试图加入items
查询的函数结果,在上面的示例中,join-criterion将是X
-列。我做了一个小例子,与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现有的表和表函数?
谢谢!这正是我正在寻找的。 –