Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогитес запросом / 14 сообщений из 14, страница 1 из 1
19.02.2009, 19:36
    #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
20.02.2009, 04:46
    #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
20.02.2009, 09:24
    #35828883
rock-n-roll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогитес запросом
Так в том то и дело что оба запроса дают одну строку date-первую удовлетворяющую условию в sum-сумма всех записей по условию. т.е в контексте вушейказанного примера будет одна строка - 12.00 01/01/2009 а нужны суммы по каждой из дат
...
Рейтинг: 0 / 0
22.02.2009, 20:44
    #35831929
rock-n-roll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогитес запросом
Ап
Господа ветераны фокса. Неужели никто не может ответить по данному вопросу. Как обойти sum(sum) без пользовательской функции(через нее работает очень долго, нужен нормальный быстрый запрос).
...
Рейтинг: 0 / 0
22.02.2009, 21:13
    #35831956
Помогитес запросом
rock-n-rollТак в том то и дело что оба запроса дают одну строку date-первую удовлетворяющую условию в sum-сумма всех записей по условию. т.е в контексте вушейказанного примера будет одна строка - 12.00 01/01/2009 а нужны суммы по каждой из дат
Ну, если я правильно понял, подставьте еще group by date
...
Рейтинг: 0 / 0
25.02.2009, 15:23
    #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
26.02.2009, 06:50
    #35838203
Galyamov Rinat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогитес запросом
Ага, group by забыл :(


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.03.2009, 14:24
    #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
05.03.2009, 14:45
    #35853429
-=AlexiS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогитес запросом
Это я так понимаю Cross table выходит
Читай тут тынц
...
Рейтинг: 0 / 0
06.03.2009, 10:20
    #35855114
Помогитес запросом
ещё один тынц по кросстабу
...
Рейтинг: 0 / 0
19.03.2009, 09:32
    #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
19.03.2009, 16:36
    #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
19.03.2009, 17:17
    #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
30.03.2009, 11:49
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогитес запросом / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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