Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 428

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Кто нибудь может помочь вот с какой проблемой (моей проблемой):
как написать условие по которому можно было бы вычислить по курсу 1 из двух валют сумму наличности...
загвоздка в том что есть 3 вида перевозки (1: те которые переводить по курсу не надо (если Fstar<5000), 2: те которые надо перевести по курсу рос.руб по опр.дате (если Fstar>=5000 и <>5080), 3: те которые надо перевести по курсу лата по опр.дате (если Fstar<>5000)
я делала вот так:

но ни одной записи оно мне не выдало...
заранее спасибо.

Приложение:
  1. SELECT
  2. round(avg(VODITXR.FVIRWN+VODITXR.FVIRLN+VODITXR.FVIRWV+VODITXR.FVIRLV+VODITXR.FVALSUM*m.KROS +VODITXR.FVALSUM*k.KLIT)) AS s1, VODITXR.Fstar, SUTKI.DNED
  3. FROM VODITXR, SUTKI,KURS,(select KROS from KURS,VODITXR where (VODITXR.fndat=KURS.DAT) and (VODITXR.fstar>=5000)and (VODITXR.fstar <>5080)) m,(select KLIT from KURS,VODITXR where (VODITXR.fndat=KURS.DAT) and (VODITXR.fstar =5080)) k
  4. WHERE (VODITXR.FNDat=SUTKI.DAT)
  5. GROUP BY DNED, Fstar;
  6.  


Примечание #1 (18 февраля 2009, 16:28):
* опечатка
3: те которые надо перевести по курсу лата по опр.дате (если Fstar<>5000)
надо:Fstar=5080

Танюшка Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задала: Танюшка (статус: Посетитель)
Вопрос отправлен: 18 февраля 2009, 15:05
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 19 февраля 2009, 10:49; участников в обсуждении: 2.
Тов. Женька

Тов. Женька (статус: 3-ий класс), 18 февраля 2009, 15:29 [#1]:

Не очень ясна задача. Можно ли как-то конкретнее сформулировать, что требуется? Ну и вводные разъясните.

Опять же перекрываются условия, например: имеется fstar = 5010 (а хоть и 5500), получается, что нужно вычислять и по курсу лата и по курсу рубля.
Если имеется fstar = 4950, то одновременно не надо вычислять вообще и надо вычислять по курсу лата.
Каша какая-то.
Танюшка

Танюшка (статус: Посетитель), 18 февраля 2009, 15:37 [#2]:

мне нужно к сформированному запросу :
sql.Add('TRANSFORM Avg(m.s1) AS [Avg-s1]');
sql.Add('SELECT m.Fstar');
sql.Add('FROM (SELECT round(avg(VODITXR.FVIRWN+VODITXR.FVIRLN+VODITXR.FVIRWV+VODITXR.FVIRLV)) AS s1, VODITXR.Fstar, SUTKI.DNED');
sql.Add('FROM VODITXR, SUTKI');
sql.Add('WHERE (VODITXR.FNDat=SUTKI.DAT) and (VODITXR.Fstar<5000) ');
sql.Add('GROUP BY DNED, Fstar) m');
sql.Add('GROUP BY m.Fstar');
sql.Add('PIVOT m.DNED');


добавить значения с суммами иностранной валюты (предварительно переведя по курсу в валюту местную (для этого естьсправочник (kurs))) и дальше как написано в первой части вопроса выборка по коду маршрута (>=5000 и <>5080 -рос.руб. ит.д.)
Танюшка

Танюшка (статус: Посетитель), 18 февраля 2009, 16:00 [#3]:

поясняю:
если имееться fstar <5000 , то переводить не надо (там должно быть Fvalsum=0), если fstar =5000 и более то Fvalsum*KROS (по курсу даты (VODITXR.fndat=KURS.DAT))
и если fstar= 5080 то
Fvalsum*KLIT (по курсу даты (VODITXR.fndat=KURS.DAT))
Тов. Женька

Тов. Женька (статус: 3-ий класс), 18 февраля 2009, 16:13 [#4]:

А как же fstar <> 5000 - по курсу лата?
Тов. Женька

Тов. Женька (статус: 3-ий класс), 19 февраля 2009, 10:49 [#5]:

Эмм...
Вот такой пример. Может натолкнет на что-то?

SELECT
"Money".DATETrans,
if(("Money".fstar >= 5000) and ("Money".fstar <> 5080) then kurs.RUB * "Money"."money" else 0) AS RUB,
if("Money".fstar = 5080 then kurs.LIT * "Money"."money" else 0) AS LIT
FROM
"Money",
KURS
WHERE
("Money".DATETrans = kurs.Datekurs)

Вводные:
Таблица "KURS"
ID Datekurs RUB LIT
1 01.01.2009 24,000 14,000
2 01.02.2009 25,000 15,000
3 01.03.2009 26,000 16,000
4 01.04.2009 27,000 17,000

Таблица "Money"
ID DATETrans fstar money
1 01.01.2009 4 900 1 500,000
2 01.02.2009 5 000 2 000,000
3 01.03.2009 5 080 2 500,000
4 01.04.2009 5 500 3 000,000

Вот как-то так. Можно так же пробовать обрабатывать условия в коде программы, или через встроенные процедуры.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:02
Выполнено за 0.02 сек.