powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогитес запросом
14 сообщений из 14, страница 1 из 1
Помогитес запросом
    #35828352
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе времени суток. Помогите с запросом нубу. Есть два тейбла к примеру
abonfl_lic
schet(N) ... filter_uch(N) ...
23661 ... 1 ..
23662 ... 1 ...
23663 ... 1 ...
23664 ... 2 ...
23665 ... 2 ...
oplatfl
schet(N) ... sum(N) ... type(L) ... date(D) ... date_month(N)
23661 ... 1,00 ... T ... 01/01/2009 ... 37
23662 ... 2,00 ... T ... 02/01/2009 ... 37
23662 ... 3,00 ... T ... 01/12/2008 ... 36
23663 ... 4,00 ... T ... 02/01/2009 ... 37
23663 ... 5,00 ... T ... 03/01/2009 ... 37
23664 ... 6,00 ... T ... 03/01/2009 ... 37

Надо получить такой курсор
sum date
1.00 01/01/2009
6.00 02/01/2009
5.00 03/01/2009
т.е. дата и сумма по этим датам, причем в запросе должны участвовать записи из oplatfl где type=.T. date_month=37
и !! в abonfl_lic у соответственного schet filter_uch=1 (abonfl_lic schet-уникален)
...
Рейтинг: 0 / 0
Помогитес запросом
    #35828701
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Надо получить такой курсор
> sum date
> 1.00 01/01/2009
> 6.00 02/01/2009
> 5.00 03/01/2009
> т.е. дата и сумма по этим датам, причем в запросе должны участвовать
> записи из oplatfl где type=.T. date_month=37
> и !! в abonfl_lic у соответственного schet filter_uch=1 (abonfl_lic
> schet-уникален)

Так здесь никаких затруднений - все из твоих условий:

Select ЧТО from ОТКУДА where ЧТО

т.е., смотрим условия задачи:
select sum(sum), date from abonfl_lic, oplatfl where abonfl_lic.schet=
oplatfl.schet and filter_uch=.t. and type=.T. and date_month=37 into cursor
My_Cursor

Теперь перепишем более наглядно:

select sum(sum), date;
from abonfl_lic INNER JOIN oplatfl ON abonfl_lic.schet= oplatfl.schet;
where filter_uch and type and date_month=37;
into cursor My_Cursor

brow



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогитес запросом
    #35828883
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в том то и дело что оба запроса дают одну строку date-первую удовлетворяющую условию в sum-сумма всех записей по условию. т.е в контексте вушейказанного примера будет одна строка - 12.00 01/01/2009 а нужны суммы по каждой из дат
...
Рейтинг: 0 / 0
Помогитес запросом
    #35831929
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ап
Господа ветераны фокса. Неужели никто не может ответить по данному вопросу. Как обойти sum(sum) без пользовательской функции(через нее работает очень долго, нужен нормальный быстрый запрос).
...
Рейтинг: 0 / 0
Помогитес запросом
    #35831956
rock-n-rollТак в том то и дело что оба запроса дают одну строку date-первую удовлетворяющую условию в sum-сумма всех записей по условию. т.е в контексте вушейказанного примера будет одна строка - 12.00 01/01/2009 а нужны суммы по каждой из дат
Ну, если я правильно понял, подставьте еще group by date
...
Рейтинг: 0 / 0
Помогитес запросом
    #35836880
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT o.date dates,sum(o.sum) my_sum;
FROM abonfl_lic a, oplatfl o
WHERE a.schet= o.schet;
AND a.filter_uch= 1 ;
AND o.type =.t.;
AND o.date_month= 37 ;
GROUP BY o.date;
INTO CURSOR Cursor1
или
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT o.date dates,sum(o.sum) my_sum;
FROM abonfl_lic a JOIN oplatfl o
ON a.schet= o.schet;
AND a.filter_uch= 1 ;
AND o.type =.t.;
AND o.date_month= 37 ;
GROUP BY o.date;
INTO CURSOR Cursor1
или
Код: plaintext
1.
2.
3.
4.
5.
SELECT o.date dates ,sum(o.sum) my_sum;
FROM  oplatfl o
WHERE  o.type =.t. AND date_month= 37 ;
AND chet IN (SELECT chet FROM abonfl_lic WHERE filter_uch= 1 )
GROUP BY o.date;
INTO CURSOR My_Cursor2
...
Рейтинг: 0 / 0
Помогитес запросом
    #35838203
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, group by забыл :(


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогитес запросом
    #35853366
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
благодарю всех ответивших
а исче такая ситуация есть табел
sum type date_month
1.00 1 1
2.00 2 1
3.00 1 2
4.00 2 2
5.00 1 1
6.00 2 2
можно ли одним запросом суммы по датам и типы в отдельные столбцы
type1 type2 date_month
6.00 2.00 1
3.00 10.00 2
заранее благодарен
...
Рейтинг: 0 / 0
Помогитес запросом
    #35853429
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я так понимаю Cross table выходит
Читай тут тынц
...
Рейтинг: 0 / 0
Помогитес запросом
    #35855114
ещё один тынц по кросстабу
...
Рейтинг: 0 / 0
Помогитес запросом
    #35878300
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем кросс намного проще. У меня известное количество типов. За ссылку спасибо прочел- мало что понял, но кое-что подчеркнул для себя и в принципе справился.
Продолжу вопрошать. Ест табл в котором записаны состояния по дням месяца (всегда с учетом количества дней в месяце)
например day_first-первый день некого состояния day_last-последний день некого состояния allpl-состояние
schet day_first day_last allpl ....
10000 1 6 1 ....
10000 7 18 2 ....
10000 19 31 3 ....
10001 1 31 1 ....
И есть курсор в котором количество строк равно количеству дней в месяце
day znac znac2 ...
1 1 ...
2 1 ...
3 1 ...
...
31 1 ...
надо сделать ОДНИМ быстрым запросом например для schet-100000
day allpl znac
1 1 1
2 1 1
..
6 1 1
7 2 1
..
18 2 1
19 3 1
..
31 3 1
...
Рейтинг: 0 / 0
Помогитес запросом
    #35879784
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
rock-n-roll,

Примерно так можно попробовать.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE CURSOR tab1(schet int,day_first int,day_last int,allpl int)
INSERT INTO tab1 values( 10000 ,  1 ,  6 ,  1 )
INSERT INTO tab1 values( 10000 ,  7 ,  18 ,  2 )
INSERT INTO tab1 values( 10000 ,  19 ,  31 ,  3 )
INSERT INTO tab1 values( 10001 ,  1 ,  6 ,  5 )
INSERT INTO tab1 values( 10001 ,  7 ,  18 ,  7 )
INSERT INTO tab1 values( 10001 ,  19 ,  28 ,  9 )

CREATE CURSOR c_days(days int,znach int)
FOR i= 1  TO  31 
INSERT INTO c_days values(i, 1 )
endfor

SELECT schet,days,allpl,znach;
FROM tab1 a,c_days b;
WHERE BETWEEN(b.days,day_first,day_last) and;
days <= all (SELECT MAX(day_last) mx FROM tab1 WHERE schet=a.schet GROUP BY schet);
order BY schet,days

schetdaysallpznach100001111000021110000311100004111000051110000611100007211000082110000921100001021100001121100001221100001321100001421100001521100001621100001721100001821100001931100002031100002131100002231100002331100002431100002531100002631100002731100002831100002931100003031100003131100011511000125110001351100014511000155110001651100017711000187110001971100011071100011171100011271100011371100011471100011571100011671100011771100011871100011991100012091100012191100012291100012391100012491100012591100012691100012791100012891
...
Рейтинг: 0 / 0
Помогитес запросом
    #35879934
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
даже ещё проще
Код: plaintext
1.
2.
3.
SELECT schet,days,allpl,znach;
FROM tab1 a,c_days b;
WHERE BETWEEN(b.days,day_first,day_last);
order BY schet,days
...
Рейтинг: 0 / 0
Помогитес запросом
    #35899987
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за все передыдущее. Новая проблемка.
Во все книгах пишут что с insert into так можно делать. Я делаю нечто подобное впервые и пишет синтаксическую
insert into domschet(num_dom_sc,allpl,when);
sele is_otp_sch as num_dom_sc,abonfl.allpl as allpl,i as when from abonfl wher is_otp_sch=nnum_dom_sc and day_first<=i and day_last>=i;
and abonfl.schet not in (sele schet as schet from avar_otp_full wher avar_otp_full.day=i)
хотя сам селект работает нормально поля имеют ту-же длинну и имя(VFP6)
но это не столь спешно а вот
исче вымучал запрос
SELECT dist tar_days.day as day,abonfl.allpl,abonfl.proj,iif(is_otp,tar_days.t_abon*abonfl.allpl,0000.00000) as abon,;
iif((abonfl.is_otp and abonfl.is_otp_sch=0),tar_days.t_otp*abonfl.allpl*koef_cach.kk_otp*xxxx,0000.00000) as otp;
FROM abonfl,tar_days,abonfl_lic,koef_cach;
WHERE BETWEEN(tar_days.day,abonfl.day_first,abonfl.day_last);
and abonfl.schet=cschet;
and abonfl_lic.schet=koef_cach.schet and abonfl_lic.schet=abonfl.schet and abonfl_lic.num_kot=tar_days.num_kot;
into curs ooo order BY day
надо сохраяя все вымученное привязаться к еще одному курсору avar_otp_full c полями schet,day
и вместо *xxxx - умножить на 0 если в avar_otp_full есть запись с schet=cschet и day='выбираемый day'
и на 1 если таковой записи нет

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


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