у меня есть что-то вроде этих 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
, критерием соединения будет 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]
еще. Поэтому я не могу выбрать конкретное подмножество в функции, используя параметры функции, это должно быть в критериях присоединения в любом случае. Кроме того, я не могу вернуть функцию все строки или создать временную таблицу, потому что это безумно медленно и дорого в отношении времени и пространства в моей конкретной ситуации.
Есть ли другой способ добиться чего-то подобного с помощью двух существующих таблиц и функции таблицы?
Спасибо! Это именно то, что я искал. –