среда, 7 августа 2013 г.

Выборка в одну колонку

С чем только не приходится сталкиваться на работе.
Вот и с MSAccess встретился.
Суть: делаю джойн двух таблиц получается примерно следующее:
Col1| Col2
----+-----
1 | A
1 | B
1 | C
2 | D
2 | E
3 | F

Нужно получить вот такое:

Col1| Col2
----+-----
1 | A, B, C
2 | D, E
3 | F

В разных СУБД делается по разному. В Oracle есть функция wm_concat, в MSSQL это делается через xml.
А в MSAccess такого нет. Для этого используется (кто бы сомневался) Visual Basic.
Я поискал и нашел. Во первых оригинал.
Во вторых, как я использую эту функцию:

select accountid, 
       ConcatRelated("resource", 
                     "resources", 
                     "resourcetype in ('Телефонный номер') 
                      and accountid = " & [c.accountid]
                     ) as phoneslist
from customers c

Создается функция ConcatRelated, у нее 5 параметров:
1. Поле, которое вынимаем - "resource"
2. Таблица, из которой берем поле - "resources"
3. Любое условие WHERE, но если мы собираемся связывать таблицу с внешним запросом, то делается это так: "resourcetype in ('Телефонный номер') and accountid = " & [c.accountid], где с - таблица из внешнего запроса
4. Порядков сортировки (необязательно). Просто перечисляем поля, например "BeginDate, type"
5. Разделитель (необязательно). Если кому-то не нравится запятая и пробел, то можно использовать, например вот это "|"

А вообще много ответов на разные вопросы я нашел на этом сайте

Комментариев нет:

Отправить комментарий