|
Конкатенация строк в запросе... КАК ?
|
|||
---|---|---|---|
#18+
Вобщем есть табличка "Песни". Есть подчиненная "Авторы". Связь "один-ко-многим" (у одной песни много авторов). Нужно сделать запрос, который выведет название песни и вычисляемое поле, в котором через запятую перечислены все авторы этой песни.... Вобщем пытался с Group By но нужна еще и агрегирующая функция.. Её надо либо написать и использовать (КАК?), либо мой способ неправильный, и надо подругому... (КАК?) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 20:01 |
|
Конкатенация строк в запросе... КАК ?
|
|||
---|---|---|---|
#18+
С помощью GROUP BY не получится, надо функцию писать. Как? ... Можно попробовать так: 1. Создай запрос с параметром на основе таблицы Авторы. Параметр поставь в условие отбора ИДа композиции. 2. Пиши функцию (назовем BuildAutorString) с одним входным параметром - переменная задающая ИД композиции. В тексте функции создай ссылку на запрос (п.1), задай параметр для этого запроса равным параметру функции. Создай на основе ссылки Recordset, в цикле пройдись по строкам Recordset-а и накопи строчку с именами авторов. Затем присвой значению функции значение строковой переменной. 3. Создай запрос на основе таблицы композиций (допустим в этой таблице ключевое поле имеет имя IdMuz). Добавь в этот запрос вычисляемое поле: BuildAutorString([IdMuz]). ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 23:31 |
|
Конкатенация строк в запросе... КАК ?
|
|||
---|---|---|---|
#18+
Впишите эту функцию (conc) в станд. модуль: ----------------------------------------- Function conc(ByVal s) On Error Resume Next Dim rs As DAO.Recordset Dim i Set rs = CurrentDb.OpenRecordset("Authors") rs.MoveFirst While Not rs.EOF If rs.Fields("song") = s Then conc = conc & rs.Fields("author") & "," End If rs.MoveNext Wend rs.Close conc = Left(conc, Len(conc) - 1) End Function ------------------------------------------------ В табле "Authors" есть два текстовых поля: "song" и "author" ----------------------------------------------------- Теперь можно написать такой запрос: SELECT song, conc(song) AS Авторы FROM Songs; --------------------------------------------------------- Внесите нужные поправки "под себя" ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2002, 23:42 |
|
Конкатенация строк в запросе... КАК ?
|
|||
---|---|---|---|
#18+
Никого не хочу обижать, но, помоему, скрипт надо поправить на: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2002, 00:16 |
|
Конкатенация строк в запросе... КАК ?
|
|||
---|---|---|---|
#18+
2ОлегК Полностью с тобой согласен (и "пробел" после "запятой" тоже желателен). Но. Подход должен быть таким: чем "примитивнее" ответ, тем легче и быстрее можно просечь его суть. А многие любят давать такие дотошные и подробные ответы, что пока в них разберешься... Как будто "спрашивающий" - это дебил какой-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2002, 14:22 |
|
Конкатенация строк в запросе... КАК ?
|
|||
---|---|---|---|
#18+
Уф... Ребята, спасибо !!! Особенно ОлегК дельно написал (ты бы еще мыло бы оставил :-)) ) Только вот никто не сказал что DAO надо подключить.. :-) Я полдня сношался отчего там несовместимость типов вылазит :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2002, 16:18 |
|
|
start [/forum/topic.php?fid=45&tid=1683185]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 295ms |
total: | 421ms |
0 / 0 |