powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проблема с union
6 сообщений из 6, страница 1 из 1
проблема с union
    #32621076
bobsan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему идет формирование 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
проблема с union
    #32621173
bobsan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не корректный вопрос. Точнее говоря в результате получается одна таблица, соответствующая последнему запросу, состящая из трех полей.

А так хотелось их все объединить.
...
Рейтинг: 0 / 0
проблема с union
    #32621174
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
проблема с union
    #32621185
bobsan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо. Теперь все ясно. Виноват был пьян.
...
Рейтинг: 0 / 0
проблема с union
    #32621214
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Некорректно составлен запрос. Возникает ошибка на этапе объединения. Необходимо перечисление ВСЕХ полей результируеющего курсора

Код: 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
проблема с union
    #32621258
bobsan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо! особенно за короткий вариант!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / проблема с union
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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