Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проблема с union / 6 сообщений из 6, страница 1 из 1
26.07.2004, 13:15
    #32621076
bobsan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с union
Почему идет формирование 6-ти разных таблиц?

select dat,sum(rashod) as r_all from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
group by dat;
union ;
select dat,sum(rashod) as r_ju from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0),1)="ю" group by dat;
union;
select dat,sum(rashod) as r_s from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0),1)="с" group by dat;
union;
select dat,sum(rashod) as r_b from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0),1)="б" group by dat;
union;
select dat,sum(rashod) as r_v from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0),1)="в" group by dat;
union;
select dat,sum(rashod) as r_a from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0),1)="а" group by dat ;
into table tables\otchet_r
...
Рейтинг: 0 / 0
26.07.2004, 13:51
    #32621173
bobsan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с union
не корректный вопрос. Точнее говоря в результате получается одна таблица, соответствующая последнему запросу, состящая из трех полей.

А так хотелось их все объединить.
...
Рейтинг: 0 / 0
26.07.2004, 13:51
    #32621174
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с union
bobsanПочему идет формирование 6-ти разных таблиц?
А ты сам-то понял, чего хочешь получить? У тебя в селектах только одно общее поле: dat. Второе поле всегда разное (r_all, r_ju, r_s и т.д.).
Решение проблемы: либо обзывай поля одинаково (например, r_all), либо пиши все шесть полей в селекте:
select dat, sum(rashod) as r_all,0 as r_ju,0 as r_s,0 as r_b, 0 as r_v,0 as r_a from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
group by dat;
union ;
select dat, 0 as r_all,sum(rashod) as r_ju,0 as r_s,0 as r_b, 0 as r_v,0 as r_a from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0),1)="ю" group by dat;
... и т.д.
into table tables\otchet_r
...
Рейтинг: 0 / 0
26.07.2004, 13:55
    #32621185
bobsan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с union
спасибо. Теперь все ясно. Виноват был пьян.
...
Рейтинг: 0 / 0
26.07.2004, 14:04
    #32621214
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с union
Некорректно составлен запрос. Возникает ошибка на этапе объединения. Необходимо перечисление ВСЕХ полей результируеющего курсора

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
select dat, ;
sum(rashod) as r_all, ;
 0000000000 . 00  as r_ju, ;
 0000000000 . 00  as r_s, ;
 0000000000 . 00  as r_b, ;
 0000000000 . 00  as r_v, ;
 0000000000 . 00  as r_a ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
group by dat ;
UNION ALL ;
select dat, ;
 0 , ;
sum(rashod) as r_ju, ;
 0 , ;
 0 , ;
 0 , ;
 0  ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0), 1 )="ю" group by dat;
UNION ALL ;
select dat, ;
 0 , ;
 0 , ;
sum(rashod) as r_s, ;
 0 , ;
 0 , ;
 0  ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0), 1 )="с" group by dat ;
UNION ALL ;
select dat, ;
 0 , ;
 0 , ;
 0 , ;
sum(rashod) as r_b, ;
 0 , ;
 0  ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0), 1 )="б" group by dat ;
UNION ALL ;
select dat, ;
 0 , ;
 0 , ;
 0 , ;
 0 , ;
sum(rashod) as r_v, ;
 0  ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0), 1 )="в" group by dat ;
UNION ALL ;
select dat, ;
 0 , ;
 0 , ;
 0 , ;
 0 , ;
 0 , ;
sum(rashod) as r_a ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
.and. left(allt(n0), 1 )="а" group by dat ;
into table tables\otchet_r 

Вообще-то, FoxPro выполняет UNION именно так. Сначала формирует временные таблицы по вложенным запросам, а потом пытается их объединить. По окончании объединения временные таблицы (результат подзапросов) удаляются.

Если по каким-либо причинам объединение по UNION невозможно, то получаешь сообщение об ошибке и временные таблицы (результат подзапросов) могут остаться висеть в памяти.

Ну, и до кучи. Твой запрос можно сделать и без UNION. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select ;
dat, ;
sum(rashod) as r_all, ;
sum(IIF(left(allt(n0), 1 )="ю",rashod, 0 . 00 )) as r_ju, ;
sum(IIF(left(allt(n0), 1 )="с",rashod, 0 . 00 )) as r_s, ;
sum(IIF(left(allt(n0), 1 )="б",rashod, 0 . 00 )) as r_b, ;
sum(IIF(left(allt(n0), 1 )="в",rashod, 0 . 00 )) as r_v, ;
sum(IIF(left(allt(n0), 1 )="а",rashod, 0 . 00 )) as r_a ;
from base!pr_r where dat>= thisform.text1.value .and. dat<= thisform.text2.value ;
group by dat;
...
Рейтинг: 0 / 0
26.07.2004, 14:24
    #32621258
bobsan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
проблема с union
спасибо! особенно за короткий вариант!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проблема с union / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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