| 
| 
 | Вопрос # 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.DNEDFROM 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)) kWHERE (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
 
 Вот как-то так. Можно так же пробовать обрабатывать условия в коде программы, или через встроенные процедуры.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |