|
Вопрос # 2 428/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Кто нибудь может помочь вот с какой проблемой (моей проблемой):
как написать условие по которому можно было бы вычислить по курсу 1 из двух валют сумму наличности...
загвоздка в том что есть 3 вида перевозки (1: те которые переводить по курсу не надо (если Fstar<5000), 2: те которые надо перевести по курсу рос.руб по опр.дате (если Fstar>=5000 и <>5080), 3: те которые надо перевести по курсу лата по опр.дате (если Fstar<>5000)
я делала вот так:
но ни одной записи оно мне не выдало...
заранее спасибо.
Приложение: Переключить в обычный режим- SELECT
- round(avg(VODITXR.FVIRWN+VODITXR.FVIRLN+VODITXR.FVIRWV+VODITXR.FVIRLV+VODITXR.FVALSUM*m.KROS
+VODITXR.FVALSUM*k.KLIT)) AS s1, VODITXR.Fstar, SUTKI.DNED
- 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
- WHERE (VODITXR.FNDat=SUTKI.DAT)
- GROUP BY DNED, Fstar;
-
Примечание #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
Вот как-то так. Можно так же пробовать обрабатывать условия в коде программы, или через встроенные процедуры.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|