2015-10-07 4 views
0

У меня есть следующие данные:Как получить сводную таблицу с конкатенированными значениями?

| ID  | TYPE | USER_ID | 
|----------|----------|----------| 
|  1 |  A |  7 | 
|  1 |  A |  8 | 
|  1 |  B |  6 | 
|  2 |  A |  9 | 
|  2 |  B |  5 | 

Я пытаюсь создать запрос для возврата

| ID  | RESULT | 
|----------|----------| 
|  1 | 7, 8, 6 | 
|  2 |  9, 5 | 

Значения User_ID должны быть упорядочены по атрибуту TYPE.

Поскольку я использую MS ACCESS, я пытаюсь свернуть. То, что я пробовал:

TRANSFORM first(user_id) 
SELECT id, type 
FROM mytable 
GROUP BY id, type 
ORDER BY type 
PIVOT user_id 

Ошибка:

Too many crosstab column headers (4547).

я что-то в синтаксисе отсутствует. Однако это кажется неправильным, поскольку агрегат first() необходимо изменить на что-то еще, чтобы объединить результаты.

PS: Я использую MS-ACCESS 2007. Если вы знаете решение для SQL-Server или Oracle, использующее только SQL (без функций поставщика или хранимых процедур), я, вероятно, соглашусь с вашим ответом, поскольку это поможет мне найти решение этой проблемы.

ответ

1

Вы не хотите использовать PIVOT. Pivot создаст столбец , названный в честь каждого из ваших идентификаторов пользователя (1 - 7). Ваше поле TYPE тоже ничего не делает.

К сожалению, делать это в SQL Server требует использование function (FOR XML Path), который не доступен в Access.

Вот ссылка на similar Access function, чтобы сделать что-то подобное.

Смежные вопросы