powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Странное округление
4 сообщений из 4, страница 1 из 1
Странное округление
    #36040972
Выполняю запрос:
INSERT INTO zpl (notdel, tnom, fio, prof, ndir, sym, sym1, sym2); && вставка данных из таблиц kadr, ls, lsg в zpl
SELECT MAX(Kadr.notdel), Lsg.tnom,;
RTRIM(Kadr.lastname)+" "+LEFT(Kadr.firstname,1)+"."+LEFT(Kadr.surname,1)+".",;
MAX(Kadr.nprof), MAX(Ls.n_dir), SUM(&val2), SUM(IIF(Ls.n_dir=21, &val2,0)),;
SUM(IIF(Ls.n_dir=22, &val2,0));
FROM ;
kadr;
INNER JOIN ls ;
ON Kadr.tnom = VAL(Ls.tnom) ;
INNER JOIN lsg ;
ON Kadr.tnom = VAL(Lsg.tnom);
WHERE ( Ls.n_dir = ( 22 );
OR Ls.n_dir = ( 21 ) );
AND ( ( ( ( ( ( ( ( ( ( VAL(Lsg.vopl) <= ( 35 );
OR VAL(Lsg.vopl) = ( 40 ) );
OR VAL(Lsg.vopl) = ( 81 ) );
OR VAL(Lsg.vopl) = ( 83 ) );
OR VAL(Lsg.vopl) = ( 84 ) );
OR VAL(Lsg.vopl) = ( 86 ) );
OR VAL(Lsg.vopl) = ( 87 ) );
OR VAL(Lsg.vopl) = ( 88 ) );
OR VAL(Lsg.vopl) = ( 90 ) );
OR VAL(Lsg.vopl) = ( 94 ) );
OR ( VAL(Lsg.vopl) >= ( 66 );
AND VAL(Lsg.vopl) <= ( 81 ) ) );
GROUP BY Lsg.tnom, 3;
ORDER BY 1

в результате в sym и sym2 нормальные дробные числа, а в sym1 идёт округление и после запятой 00.
В чём может быть проблема? Запрос для sym sym1 sym2 одинаковый...
...
Рейтинг: 0 / 0
Странное округление
    #36041010
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Указать конкретный формат данных

Код: plaintext
1.
2.
select .....
cast(SUM(&val2) as n( 12 , 2 )), cast(SUM(IIF(Ls.n_dir= 21 , &val2, 0 )) as n( 12 , 2 )),;
cast(SUM(IIF(Ls.n_dir= 22 , &val2, 0 )) as n( 12 , 2 )) ...
...
Рейтинг: 0 / 0
Странное округление
    #36041023
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Insert Into zpl (notdel, tnom, fio, prof, ndir, sym, sym1, sym2); && вставка данных из таблиц kadr, ls, lsg в zpl
Select Max(Kadr.notdel) ;
     , Lsg.tnom,;
	 , RTRIM(Kadr.lastname)+" "+Left(Kadr.firstname, 1 )+"."+Left(Kadr.surname, 1 )+"." ;
	 , MAX(Kadr.nprof) ;
	 , Max(Ls.n_dir)   ;
	 , Sum(&val2)      ;
	 , Sum(Iif(Ls.n_dir= 21 , &val2,  0000000 . 00 )) ;
	 , SUM(Iif(Ls.n_dir= 22 , &val2,  0000000 . 00 )) ;
	FROM Kadr;
		INNER Join Ls ON Kadr.tnom = Val(Ls.tnom) ;
		INNER Join Lsg ON Kadr.tnom = Val(Lsg.tnom);
	WHERE InList( Ls.n_dir, 21 ,  22  ) ;
		AND (Val(Lsg.vopl) <= (  35  );
		OR InList( Val(Lsg.vopl),  40 ,  81 ,  83 ,  84 ,  86 ,  87 ,  88 ,  90 ,  94  ) ;
		OR Between( Val(Lsg.vopl),  66 ,  80  ) );
	GROUP By Lsg.tnom,  3 ;
	ORDER By  1 

чтобы избежать макроподстановок,
необходимо начитать вначаеле строку,
затем выполнить одной макроподстановкой
...
Рейтинг: 0 / 0
Странное округление
    #36041043
прошелмимо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
FROM Kadr;
		INNER Join Ls ON Kadr.tnom = Val(Ls.tnom)  ;
		INNER Join Lsg ON Kadr.tnom = Val(Lsg.tnom);
	WHERE InList( Ls.n_dir, 21 ,  22  ) ;
		AND (Val(Lsg.vopl) <= (  35  );
		OR InList( Val(Lsg.vopl),  40 ,  81 ,  83 ,  84 ,  86 ,  87 ,  88 ,  90 ,  94  ) ;
		OR Between( Val(Lsg.vopl),  66 ,  80  ) );


* писать как-то так
FROM Kadr;
		INNER Join Ls ON Kadr.tnom = Val(Ls.tnom) and InList( Ls.n_dir, 21 ,  22 ) ;
		INNER Join Lsg ON Kadr.tnom = Val(Lsg.tnom) ;
						  AND (Val(Lsg.vopl) <= (  35  );
		                       OR InList( Val(Lsg.vopl),  40 ,  81 ,  83 ,  84 ,  86 ,  87 ,  88 ,  90 ,  94  ) ;
               		           OR Between( Val(Lsg.vopl),  66 ,  80  ) )

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


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