Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос с перечислением / 10 сообщений из 10, страница 1 из 1
09.06.2005, 16:57:58
    #33110154
Helpik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Есть табла

Numb| Param| ID

1 |A |1
2 |B |2
3 |A |3
1 |C |4
2 |A |5
3 |A |6
1 |B |7
2 |C |8
3 |B |9

Необходимо получить результат вида

Numb| Param| ID
9 |A |1,3,5,6
6 |B |2,7,9,
3 |C |4,8

Происходит группировка по Param, суммирование по Numb и перечисление через запятую ( наличие запятой не принципиально) ID.
К сожалению не совсем понимаю каким образом это перечмсление сделать.
Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
09.06.2005, 17:21:04
    #33110236
mvictor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
одним запросом у тебя не выйдет
сначала напиши функцию, кот. будет возвращать перечисления id для заданного param (напр. get_id_string() )

затем что то вроде
select sum(numb) snum, param from xxx;
group by param;
into cursor yyy nofilter

select snum,param,get_id_string(param)
...
Рейтинг: 0 / 0
09.06.2005, 17:21:34
    #33110237
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
select * from t1 into curs qq1 order by Param,id
*go top
create cursor qq2 (p1 n(10),p2 c(10),p3 c(50))
do while !eof('qq1')
wp2=qq1.parm
wp1=0
wp3=''
do while !eof('qq1') and wp2=qq1.parm
wp1=+qq1.Numb
wp3=+iif(!empty(qq1.id),','+transform(qq1.id),'')
skip
enddo
insert into qq2 (p1,p2,p3) values (wp1,wp2,iif(!empty(wp3),substr(wp3,2),''))
*select qq1
enddo
use in qq1
select qq2
brow normal
ошибочки отловите
...
Рейтинг: 0 / 0
09.06.2005, 17:44:19
    #33110314
Helpik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Так то оно так, но вопрос в другом: можно ли все это осуществить с помощью запросов?
...
Рейтинг: 0 / 0
09.06.2005, 18:13:29
    #33110399
ГенГрум
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
А ты хочешь работать с локальной базой или с сервером?(клиент-сервер)

----------------------------------------------------------
Делай своё дело и будь что будет.
...
Рейтинг: 0 / 0
10.06.2005, 00:24:40
    #33110716
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Hi Helpik!

C помошью ТОЛЬКО запросов - нет. Как минимум нужна UDF, о чём и написал mvictor
Хотя всё зависит от того с какой СУБД ты работаешь, возможно что в твоей СУБД и есть уже встроенная такая функция. В фоксе такой нету.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
10.06.2005, 09:39:09
    #33110978
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Посмотри обсуждение здесь, http://]http://forum.foxclub.ru/read.php?f=29&i=3422&t=3422, так же пару постов ниже есть ссылка на первоисточник.
...
Рейтинг: 0 / 0
10.06.2005, 10:26:50
    #33111114
Helpik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Спасибо всем за объяснение, но все-таки остается вопрос ))
неужели нету функции такой типа SUM() но чтобы она работала не с числовыми типами а со строками. Н-р
concat('a','b','c') = abc
И если ее нет то че ж ее не сделают то никак !!!
...
Рейтинг: 0 / 0
10.06.2005, 10:45:22
    #33111186
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Для сложения символьных строк используют "+"

Код: plaintext
? 'First' + 'Second'

так же есть масса функци работы со строками STUFF, SUBSTR, AT итд.
...
Рейтинг: 0 / 0
12.06.2005, 21:26:19
    #33113791
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с перечислением
Hi Helpik!

Нету, ибо нужна она мало кому. Кроме того если для SUM() порядок суссирования совершенно безразличен, то для такой склейки - нет. И опять-же как быть скажем с концевыми пробелами - если поле Char(x) то и склеиваться будут куски по x символов. разделителей между ними тоже не будет... В общем получается что на КАЖДЫЙ такой случай нужен СВОЙ УНИКАЛЬНЫЙ алгоритм склейки. Так что правильно делают производители СУБД что не внедряют никаких таких "автоматических" функций. Вот если бы можно было в фоксе сделать механизм создания не просто UDF, а именно агрегирующих функций - вот то было бы неплохо, ибо без этого и приходиться в 2 запроса делать.

Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Запрос с перечислением / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]