Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Надо немного переделать запрос / 10 сообщений из 10, страница 1 из 1
14.02.2008, 14:07
    #35132761
GavRYshA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
В фоесе я проктически бот, так чт оне судите строго
Работа идет в 9-ом фоксе.

это код на кнопке вызова отчета
Код: 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.
o1=thisform.olecontrol1
o2=thisform.olecontrol2
date1=CTOD(STR(o1.day, 2 )+'/'+STR(o1.month, 2 )+'/'+STR(o1.year, 4 ))
date2=CTOD(STR(o2.day, 2 )+'/'+STR(o2.month, 2 )+'/'+STR(o2.year, 4 ))

SELECT a.kod_nazv,;
       b.naim1 as naim,;
       c.naim1 as avtor,;
       b.god_izd,;
       d.kod as kod_izd;           
FROM soc a,nazv b,avtor c,izdatel d;
WHERE a.kod_nazv = b.kod AND;
      b.kod_avtor = c.kod AND;
      b.kod_izd = d.kod; 
INTO CURSOR _1
  
SELECT a.kod_nazv,;
       a.naim,;
       a.avtor,;
       a.god_izd,;
       a.kod_izd,;
       ROUND(b.cena_post*( 100 +b.nds)/ 100 , 0 ) as cenands,;
       IIF(ISNULL(c.kol), 0 ,c.kol) as kol,;
       IIF(ISNULL(e.publGrID), 0 ,e.publGrID) as publGrID;
FROM _1 a INNER JOIN;
       (prihod b LEFT OUTER JOIN; 
         (rashod c INNER JOIN;
           (bibl d LEFT OUTER JOIN bibl_publGr e ON d.publGrID = e.publGrID);
         ON c.k_k = d.k_k);
        ON b.kod_nazv = c.kod_nazv AND b.kcen = c.kcen;
          AND c.dt_dok BETWEEN date1 AND date2);
     ON a.kod_nazv = b.kod_nazv ; 
INTO CURSOR _2;
    
SELECT kod_nazv,naim,avtor,god_izd,kod_izd,cenands,publGrID,SUM(kol) as kol;
FROM _2 GROUP BY  1 , 2 , 3 , 4 , 5 , 6 , 7 ;
INTO CURSOR _rash  

  DO bibl_otch4 WITH date1,date2 
  REPORT FORM rep_2 TO PRINTER PROMPT preview

а это запрос из программы bibl_otch4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
.....................
SELECT MAX(god_izd) AS god FROM _rash;
INTO CURSOR _god
SELECT a.PublGrID,;
       b.Name,;
       SUM(a.kol) AS kolt,;
       SUM(a.kol*a.cenands) AS sumt,;
       SUM(IIF(a.god_izd = _god.god,a.kol, 0 )) AS kol,;
       SUM(IIF(a.god_izd = _god.god,a.kol * a.cenands, 0 )) AS sum;
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
WHERE a.PublGrID >  0  AND a.kod_izd = _izd_kod;
GROUP BY  1 , 2 ;
ORDER BY  2 ;
INTO CURSOR _otch
......................

То что выше все работает, но мне щас надо переделать это все так чтобы вместо publGrID выбор шел по полю shkol (логическое), т.е. где .t. вести подсчет.

Впринципе мне надо тольло общая сумма и количество за определенный период по одному коду издателя (_izd_kod), так что все остольное мне не важно

В архиве я скинул 2 таблицы: bibl.dbf и bibl_publgr.dbf

Плиз очень нужно сегодня сделать
...
Рейтинг: 0 / 0
14.02.2008, 14:24
    #35132849
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
Не вдаваясь в задачу обращу внимание на необходимость, по моему мнению, замены
Код: plaintext
1.
date1=CTOD(STR(o1.day, 2 )+'/'+STR(o1.month, 2 )+'/'+STR(o1.year, 4 ))
date2=CTOD(STR(o2.day, 2 )+'/'+STR(o2.month, 2 )+'/'+STR(o2.year, 4 ))
на
Код: plaintext
1.
date1=Date(o1.year,o1.month,o1.day)
date2=Date(o2.year,o2.month,o1.day)
...
Рейтинг: 0 / 0
14.02.2008, 14:27
    #35132868
GavRYshA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
код писал не я ... и о его логичности плиз не судите

тут просто нужно переделать по 1-2 строки в запросах
ХЕЛЛППП...
...
Рейтинг: 0 / 0
14.02.2008, 14:30
    #35132886
Sergey Sizov.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
Вместо
Код: plaintext
WHERE a.PublGrID >  0  AND a.kod_izd = _izd_kod;
поставьте
Код: plaintext
WHERE  shkol AND a.kod_izd = _izd_kod;
...
Рейтинг: 0 / 0
14.02.2008, 14:35
    #35132905
GavRYshA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
пишет что не пожет найти столбец shkol
...
Рейтинг: 0 / 0
14.02.2008, 14:50
    #35132977
GavRYshA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
в коде кнопки я так понимаю формируется таблица _rash из которой далее вытягиваются по определенному запросу данные ... вот как то, где там и надо прописать поле shkol вместо publGrID и все что с ним связано
...
Рейтинг: 0 / 0
15.02.2008, 12:27
    #35134557
GavRYshA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
Лин помогите кто ... тут как я понимаю надо всего поменять правильно 2 строки
...............
(bibl d LEFT OUTER JOIN bibl_publGr e ON d.publGrID = e.publGrID);
...............


...............
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
...............
...
Рейтинг: 0 / 0
15.02.2008, 23:13
    #35136565
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
Ну, при формировании курсора _2 практически ничего менять не надо. Надо только добавить выбор еще и поля Bibl.Shkol по аналогии с полем e.publGrID

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT ;
       ...;
       IIF(ISNULL(c.kol), 0 ,c.kol) as kol,;
       IIF(ISNULL(e.publGrID), 0 ,e.publGrID) as publGrID,;
* Вот эту строчку добавляем не забыв вставить запятую в конец предыдущей
       IIF(ISNULL(d.Shkol),.F.,d.Shkol) as Shkol,;
FROM _1 a INNER JOIN;
...
INTO CURSOR _2

В результате, ты получаешь в курсоре _2 нужное тебе поле.

А вот дальнейшие действия зависят от того, как используется курсор _rash в форме bibl_otch4 и отчете rep_2.

Простейший алгоритм действий - это добавить новое поле Shkol в группировку для получения курсора _rash

Код: plaintext
1.
2.
3.
SELECT kod_nazv,naim,avtor,god_izd,kod_izd,cenands,publGrID, Shkol, SUM(kol) as kol;
FROM _2 GROUP BY  1 , 2 , 3 , 4 , 5 , 6 , 7 ,  8  ;
INTO CURSOR _rash 


Соответственно, в последнем запросе у тебя уже будет поле _rash.Shkol по которому можно выполнить анализ. Банально заменяешь a.publGrID на a.Shkol в условии WHERE

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT a.PublGrID,;
       b.Name,;
       SUM(a.kol) AS kolt,;
       SUM(a.kol*a.cenands) AS sumt,;
       SUM(IIF(a.god_izd = _god.god,a.kol, 0 )) AS kol,;
       SUM(IIF(a.god_izd = _god.god,a.kol * a.cenands, 0 )) AS sum;
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
WHERE a.Shkol AND a.kod_izd = _izd_kod;
GROUP BY  1 , 2 ;
ORDER BY  2 ;
INTO CURSOR _otch

Но здесь нет уверенности, поскольку не известна общая постановка задачи. Не помешает ли лишнее условие группировки работе формы и отчета? Да и запросы очень неряшлево написаны.
...
Рейтинг: 0 / 0
16.02.2008, 13:25
    #35136836
GavRYshA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
Вкратце о пастановке: надо из найти кольчество и сумму книг которые закупали определенные библиотеки (публичне, школьные, иные учреждения образ.) опреденныех издателей (_izd_kod их у меня всего 9). с публичными все работает т к это уже было написано, а вот для остальных мне надо доделать. Выбирать для shkol надо есть в таблице bibl стоит .T. , так же как и для publGrID только publGrID смотрит если > 0 значит публичная и тянет еще название ее с таблицы bibl_publGr для shkol это не надо.

Вроде как поле добавилось, только выдает все значения 0
я так думаю что в курсоре 2 не идет сам выбор по полю shkol вот и остаются там все .f.

Желательно сделать в одном запросе и для publGrID и для Shkol, но это не критично
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
SELECT a.kod_nazv,;
       a.naim,;
       a.avtor,;
       a.god_izd,;
       a.kod_izd,;
       ROUND(b.cena_post*( 100 +b.nds)/ 100 , 0 ) as cenands,;
       IIF(ISNULL(c.kol), 0 ,c.kol) as kol,;
       IIF(ISNULL(e.publGrID), 0 ,e.publGrID) as publGrID,;
       IIF(ISNULL(d.Shkol),.F.,d.Shkol) as Shkol;       
FROM _1 a INNER JOIN;
       (prihod b LEFT OUTER JOIN; 
         (rashod c INNER JOIN;
*вот что то по онологии с publGrID надо написать про shkol только не обращаясь к таблице
*bibl_publGr она просто со shkol не нужна
           (bibl d LEFT OUTER JOIN bibl_publGr e ON d.publGrID = e.publGrID);
         ON c.k_k = d.k_k);
        ON b.kod_nazv = c.kod_nazv AND b.kcen = c.kcen;
          AND c.dt_dok BETWEEN date1 AND date2);
     ON a.kod_nazv = b.kod_nazv ; 
INTO CURSOR _2;

дальше в прг
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ELECT a.PublGrID,;
       b.Name,;
       SUM(a.kol) AS kolt,;
       SUM(a.kol*a.cenands) AS sumt,;
       SUM(IIF(a.god_izd = _god.god,a.kol, 0 )) AS kol,;
       SUM(IIF(a.god_izd = _god.god,a.kol * a.cenands, 0 )) AS sum;
*по ходу и тут надо исправить под поле Shkol
FROM _rash a INNER JOIN bibl_publGr b ON a.publGrID = b.publGrID;
WHERE a.Shkol AND a.kod_izd = _izd_kod;
GROUP BY  1 , 2 ;
ORDER BY  2 ;
INTO CURSOR _otch


В скинутом файле код программы для вывода в отчет. Отчет сам состоит из одной строки _str
Как такового отчета еще нету мне пока главное поулчить правильные числа
...
Рейтинг: 0 / 0
16.02.2008, 13:41
    #35136846
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Надо немного переделать запрос
В глаза бросилось:
Код: plaintext
IIF(ISNULL(c.kol), 0 ,c.kol)
можно так писать
Код: plaintext
nvl(c.kol,  0 )

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


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