Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Несколько строк в одну (*.mdb) [Access]


Дмитрий С ©   (2010-02-03 05:18:00) 

Есть таблица:

id    name
1     Алексей
2     Дмитрий
3     Виктор
4     Иван

Нужно составить запрос который, для всей данной таблицы вернет одно значение:
"Алексей/Дмитрий/Виктор/Иван"

Обработать запрос в программе нельзя, т.к. ее исходников нет, изменить можно только сам запрос.


Anatoly Podgoretsky   (2010-02-04 08:53:00) [1]

> Дмитрий С  (04.02.2010 05:20:07)  [7]

Легче перечислить те базы, где есть LIMIT, чем те где его нет.
В Акцесс есть только стандартный TOP


Дмитрий С   (2010-02-04 05:20:00) [2]


> Виталий Панасенко(дом)   (03.02.10 16:51) [6]

Вопрос не в этом. Вопрос в объединении нескольких записей в одну строку одним запросом.

Сопутствующий вопрос: Есть в Access-овой базе аналог LIMIT из MySQL ? Чтобы можно было задать количество записей и задать с какой начинать.


Виталий Панасенко(дом)   (2010-02-03 16:51:00) [3]

и что? зато работает


Дмитрий С   (2010-02-03 10:53:00) [4]


> Виталий Панасенко(дом)   (03.02.10 10:41) [4]

В нем два раза выражение указывать нужно


Виталий Панасенко(дом)   (2010-02-03 10:41:00) [5]

iif используй для проверки null


Дмитрий С   (2010-02-03 08:16:00) [6]


> Кщд   (03.02.10 07:51) [2]

Понятно. А разве можно использовать макросы, если подключаешься к базе через ADO ?

+ Желательно *.mdb не изменять.


Кщд   (2010-02-03 07:51:00) [7]

http://allenbrowne.com/func-concat.html
http://www.databasejournal.com/features/msaccess/article.php/2247531/Concatenate-Column-Values-from-Multiple-Rows-into-a-Single-Column-with-Access.htm


Дмитрий С   (2010-02-03 06:19:00) [8]

На ум приходит примерно такой вариант:

SELECT TOP 1 [t1].[name]
+Nz((SELECT TOP 1 '/'+[t2].[name]
 +Nz((SELECT TOP 1 '/'+[t3].[name]
   +Nz((SELECT TOP 1 '/'+[t4].[name]
     +Nz((SELECT TOP 1 '/'+[t5].[name]
       +Nz((SELECT TOP 1 '/'+[t6].[name]
          +Nz((SELECT TOP 1 '/'+[t7].[name]
         FROM [test] AS [t7] WHERE [t7].[id]<[t6].[id] ORDER BY [t7].[id] DESC))
       FROM [test] AS [t6] WHERE [t6].[id]<[t5].[id] ORDER BY [t6].[id] DESC))
     FROM [test] AS [t5] WHERE [t5].[id]<[t4].[id] ORDER BY [t5].[id] DESC))
   FROM [test] AS [t4] WHERE [t4].[id]<[t3].[id] ORDER BY [t4].[id] DESC))
 FROM [test] AS [t3] WHERE [t3].[id]<[t2].[id] ORDER BY [t3].[id] DESC))
FROM [test] AS [t2] WHERE [t2].[id]<[t1].[id] ORDER BY [t2].[id] DESC))

FROM
[test] AS [t1]
ORDER BY [t1].[id] DESC


Nz- возвращает пустую строку, если аргумент null.

Но хочется более изящного решения


Наверх

Титульная страница Поиск, карта сайта Написать письмо