Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос / 18 сообщений из 18, страница 1 из 1
26.11.2009, 12:10
    #36333133
Местами администратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Есть идеи как реализовать в виде sql запроса следующую задачу:
имеется таблица, содержащая данные

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

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

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

Scan не предлагать, слишком медленно.
...
Рейтинг: 0 / 0
26.11.2009, 12:42
    #36333254
SQL запрос
Местами администраторЕсть идеи как реализовать в виде 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
26.11.2009, 13:22
    #36333426
quxix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Местами администраторЕсть идеи как реализовать в виде 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
26.11.2009, 14:18
    #36333668
Местами администратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Станислав С...кийМестами администраторЕсть идеи как реализовать в виде 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
26.11.2009, 14:42
    #36333770
Местами администратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
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
26.11.2009, 14:42
    #36333771
Sea_Cat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Местами администратор,

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

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

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

Спасибо всем за помощь.
...
Рейтинг: 0 / 0
30.11.2009, 09:01
    #36338198
SQL запрос
Местами администраторЗаранее не известно будет один, два или триста налогов.
А с этим аккуратнее - помните про ограничение на число полей в таблице!!!
...
Рейтинг: 0 / 0
30.11.2009, 10:17
    #36338290
Местами администратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
А это тоже учел, но не в лоб, (настоящие герои всегда идут в обход) - имя поля таблицы имеет неизменное кол-во символов, считаю общую длину - если превышено - сообщение пользователю о необходимости сократить перечень, запросная система позволяет это сделать.
...
Рейтинг: 0 / 0
30.11.2009, 10:20
    #36338297
LUCIAN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Местами администратор,
Можно попробовать так
Код: 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
30.11.2009, 10:36
    #36338333
Местами администратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Очень приятно, что на SQL.ru столько толковых людей, спасибо за идеи. Будет время попробую все варианты. Тот который сейчас использую вполне устраивает.
В результате получается такая вот таблица, юзеры в восторге.
...
Рейтинг: 0 / 0
30.11.2009, 10:41
    #36338343
Местами администратор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Специфика данной программы ,в том что данные загружаются с sql сервера, и основной целью является печать квитанций со штрих-кодом в полевых условиях (на выезде). - не таскать же сервак с собой (база на серваке около 100 Гб) ну это для пользователей, а для меня обкатка технологий и расширения их перечня.
...
Рейтинг: 0 / 0
01.12.2009, 09:00
    #36340236
SQL запрос
здесь http://sql.ru/forum/actualthread.aspx?tid=576943 предлагал свой вариант кросстаба... для этой задачи он подходит... и по барабану сколько там будет налогов...
там два варианта для 6 и для 8 версии фокса...
...
Рейтинг: 0 / 0
03.12.2009, 15:13
    #36346242
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
LUCIAN* сформируем шахматку
DO (_GENXTAB) WITH 'SAXW',.t.,.t.,.t.,,,,.T.,0,.F.
(_GENXTAB) заменить на VFPXTAB, иначе при работе в рантайме пойдут ошибки.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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