powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос
18 сообщений из 18, страница 1 из 1
SQL запрос
    #36333133
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть идеи как реализовать в виде sql запроса следующую задачу:
имеется таблица, содержащая данные

ФИО, ИНН, Адрес, Налог, Сумма налога

Требуется суммирование налогов по видам и вывод ввиде:

ФИО, ИНН, Адрес, Налог1, Налог2, Налог3

Scan не предлагать, слишком медленно.
...
Рейтинг: 0 / 0
SQL запрос
    #36333254
Местами администраторЕсть идеи как реализовать в виде sql запроса следующую задачу:
имеется таблица, содержащая данные

ФИО, ИНН, Адрес, Налог, Сумма налога

Требуется суммирование налогов по видам и вывод ввиде:

ФИО, ИНН, Адрес, Налог1, Налог2, Налог3

Scan не предлагать, слишком медленно.
Я бы сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select ФИО, ИНН, Адрес, Налог, Sum(Сумма Налога) as Summa
from Таблица
group by ФИО, ИНН, Адрес, Налог
order by ФИО, ИНН, Адрес
into cursor tmpData

* затем сканом полученного курсора заполнял ту структуру таблицы, которая Вам необходима...
* Ну, или немного "усовершенствованным" сканом:

select distinct ФИО, ИНН, Адрес from Таблица into cursor tmpSpisok

select tmpSpisok
scan
select * from tmpData where ФИО = tmpSpisok.ФИО and ИНН= tmpSpisok.ИНН and Адрес= tmpSpisok.Адрес into cursor Nalogi
* Здесь заполняете необходимую структуру Вашей итоговой таблицы
select tmpSpisok
endscan
...
Рейтинг: 0 / 0
SQL запрос
    #36333426
quxix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Местами администраторЕсть идеи как реализовать в виде sql запроса следующую задачу:
имеется таблица, содержащая данные
ФИО, ИНН, Адрес, Налог, Сумма налога
Требуется суммирование налогов по видам и вывод ввиде:
ФИО, ИНН, Адрес, Налог1, Налог2, Налог3
Scan не предлагать, слишком медленно.
Код: plaintext
1.
2.
3.
4.
5.
select fio,inn,adr,;
sum(iif(nalog=vid1,nalog1, 0 ))nalog1,;
sum(iif(nalog=vid2,nalog2, 0 ))nalog2,;
sum(iif(nalog=vid3,nalog3, 0 ))nalog3;
from Mytable;
group by fio,inn,adr
...
Рейтинг: 0 / 0
SQL запрос
    #36333668
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Станислав С...кийМестами администраторЕсть идеи как реализовать в виде sql запроса следующую задачу:
имеется таблица, содержащая данные

ФИО, ИНН, Адрес, Налог, Сумма налога

Требуется суммирование налогов по видам и вывод ввиде:

ФИО, ИНН, Адрес, Налог1, Налог2, Налог3

Scan не предлагать, слишком медленно.
Я бы сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select ФИО, ИНН, Адрес, Налог, Sum(Сумма Налога) as Summa
from Таблица
group by ФИО, ИНН, Адрес, Налог
order by ФИО, ИНН, Адрес
into cursor tmpData

* затем сканом полученного курсора заполнял ту структуру таблицы, которая Вам необходима...
* Ну, или немного "усовершенствованным" сканом:

select distinct ФИО, ИНН, Адрес from Таблица into cursor tmpSpisok

select tmpSpisok
scan
select * from tmpData where ФИО = tmpSpisok.ФИО and ИНН= tmpSpisok.ИНН and Адрес= tmpSpisok.Адрес into cursor Nalogi
* Здесь заполняете необходимую структуру Вашей итоговой таблицы
select tmpSpisok
endscan


почти так и есть сейчас, но долго - scan не предлагать (200-500 тыс записей)
...
Рейтинг: 0 / 0
SQL запрос
    #36333770
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
quxixМестами администраторЕсть идеи как реализовать в виде sql запроса следующую задачу:
имеется таблица, содержащая данные
ФИО, ИНН, Адрес, Налог, Сумма налога
Требуется суммирование налогов по видам и вывод ввиде:
ФИО, ИНН, Адрес, Налог1, Налог2, Налог3
Scan не предлагать, слишком медленно.
Код: plaintext
1.
2.
3.
4.
5.
select fio,inn,adr,;
sum(iif(nalog=vid1,nalog1, 0 ))nalog1,;
sum(iif(nalog=vid2,nalog2, 0 ))nalog2,;
sum(iif(nalog=vid3,nalog3, 0 ))nalog3;
from Mytable;
group by fio,inn,adr


Спасибо, iif - помогает, адаптировал под реальную таблицу и все отлично
...
Рейтинг: 0 / 0
SQL запрос
    #36333771
Sea_Cat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Местами администратор,

Для этих целей в поставке Фокса имеется программа кросс-табуляции - VFPXTAB.PRG (бывшая GenXtab).
...
Рейтинг: 0 / 0
SQL запрос
    #36334317
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sea_CatМестами администратор,

Для этих целей в поставке Фокса имеется программа кросс-табуляции - VFPXTAB.PRG (бывшая GenXtab).

Спасибо, обошелся без нее, информация к размышлению - при использовании scan - операция выполнялась на 200 тыс.записей около 8 минут, теперь секунд 5
...
Рейтинг: 0 / 0
SQL запрос
    #36334846
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Местами администратор,
размыслил
Ваш SCAN .... ENDSCAN как то неверно был организован
...
Рейтинг: 0 / 0
SQL запрос
    #36336832
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно, но задача требовала быстрого решения, на скорую руку получилось то, что получилось.
И тем не менее scan по опыту при больших таблицах (может на базе, где 5000 записей и не видно разницы) работает медленнее.
...
Рейтинг: 0 / 0
SQL запрос
    #36337358
Eugen Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Напрашивается VFPXTAB.PRG или GenXtab
Но можно и в лоб если известно что такое Налог1,Налог2,Налог3.
Видимо имеется ещё признак в исходной базе - Вид налога (1,2,3).
Тогда пишем 3 раза SELECT-SQL соответственно для Вид налога1,Вид налога2,Вид налога3,
а четвёртым SELECT SQL собираем эти три в кучу и группируем по ФИО, ИНН, и т.д.
VFPXTAB.PRG для решения таких проблем в принципе и делали.
...
Рейтинг: 0 / 0
SQL запрос
    #36337797
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все уже сделал при помощи iif() - работает очень быстро. Заранее не известно будет один, два или триста налогов. При помощи макроподстановок все решается.

Спасибо всем за помощь.
...
Рейтинг: 0 / 0
SQL запрос
    #36338198
Местами администраторЗаранее не известно будет один, два или триста налогов.
А с этим аккуратнее - помните про ограничение на число полей в таблице!!!
...
Рейтинг: 0 / 0
SQL запрос
    #36338290
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это тоже учел, но не в лоб, (настоящие герои всегда идут в обход) - имя поля таблицы имеет неизменное кол-во символов, считаю общую длину - если превышено - сообщение пользователю о необходимости сократить перечень, запросная система позволяет это сделать.
...
Рейтинг: 0 / 0
SQL запрос
    #36338297
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Местами администратор,
Можно попробовать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
* Создадим справочник 
SELECT RECNO() kod,tab2.ФИО, tab2.ИНН, tab2.Адрес FROM ;
(SELECT DISTINCT ФИО, ИНН, Адрес FROM Tab1 ORDER BY  1 , 2 , 3  ) tab2 ;
INTO CURSOR sp_fio
* закодируем таблицу tab1
SELECT sp_fio.kod,tab1.Налог,SUM(tab1.Сумма_налога) sumn FROM tab1 INNER JOIN sp_fio ;
	ON tab1.ФИО+tab2.ИНН+tab2.Адрес=sp_fio.ФИО+sp_fio.ИНН+sp_fio.Адрес GROUP BY  1 , 2  INTO CURSOR  cnal
* сформируем шахматку
DO (_GENXTAB) WITH 'SAXW',.t.,.t.,.t.,,,,.T., 0 ,.F.
* Раскодируем шахматку
SELE SAXW
KPL=AFIELDS(MAS)
QUE="SELECT Sp_fio.ФИО,sp_fio.ИНН,sp_fio.Адрес,"
FOR I= 2  TO KPL- 1 
	QUE=QUE+"SAXW."+RTRIM(MAS(I, 1 ))+","
ENDFOR
QUE=QUE+"SAXW.TOTAL"+" ИТОГО_НАЛОГА"
QUE=QUE+" FROM SAXW,SP_FIO WHERE SP_FIO.KOD=SAXW.KOD INTO CURSOR SAXM"
&QUE

...
Рейтинг: 0 / 0
SQL запрос
    #36338333
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень приятно, что на SQL.ru столько толковых людей, спасибо за идеи. Будет время попробую все варианты. Тот который сейчас использую вполне устраивает.
В результате получается такая вот таблица, юзеры в восторге.
...
Рейтинг: 0 / 0
SQL запрос
    #36338343
Местами администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Специфика данной программы ,в том что данные загружаются с sql сервера, и основной целью является печать квитанций со штрих-кодом в полевых условиях (на выезде). - не таскать же сервак с собой (база на серваке около 100 Гб) ну это для пользователей, а для меня обкатка технологий и расширения их перечня.
...
Рейтинг: 0 / 0
SQL запрос
    #36340236
здесь http://sql.ru/forum/actualthread.aspx?tid=576943 предлагал свой вариант кросстаба... для этой задачи он подходит... и по барабану сколько там будет налогов...
там два варианта для 6 и для 8 версии фокса...
...
Рейтинг: 0 / 0
SQL запрос
    #36346242
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LUCIAN* сформируем шахматку
DO (_GENXTAB) WITH 'SAXW',.t.,.t.,.t.,,,,.T.,0,.F.
(_GENXTAB) заменить на VFPXTAB, иначе при работе в рантайме пойдут ошибки.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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