| 
 | 
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Господа, подскажите как отсортировать запрос по ценам если они указаны в разных единицах например таблица SALES goods price money Товар1 100 USD Товар2 200 USD Товар3 100 EUR Товар4 10000 РУБ что то типа того Код: plaintext 1. 2. 3. 4. желательно на чистом SQL (не PL/SQL или TSQL) Заранее благодарен!!! ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 08:18 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  нужно перевести в одну систему. В доллары, евро или рубли. Иначе никакой сортировки не получится. Компьютеру всё равно как мы цену измеряем. Он биты в байтах считает. :) В общем, нужно ещё одно поле завести, которое будет указывать вид валюты. Можно. конечно. и так, как у вас через поле price, но я обычно завожу целочисленный идентификатор для связи. Плюс таблицу - справочник валют. Только сразу поределитесь с тем, какая валюта будет базовой. Для неё курс равен 1, а для остальных нужно будет посчитать и внести в таблицу. Например: TableGoods (ID_Goods,NameGoods,price,ID_Money) TableMoney (ID_Money,NameMoney,CursMoney) тогда запрос будет выглядеть примерно так: select ID_Goods,NameGoods,Price,NameMoney,(Price*CursMoney) as RealPrice from TableGoods,TableMoney where TableGoods.ID_Money=TableMoney.ID_Money order by RealPrice,NameGoods В этом случае вам не придётся переписывать запрос при изменении курса валют. Кстати, по собтвенному опыту знаю, что в справочнике товаров лучше иметь ссылку на таблицу валют с курсами, а вот в счетах и прочих документах, которые выписываются на конкретную дату, желательно курс и вид валюты сохранять в каждой записи. Иначе при изменении курса в базовой таблице у вас поплывут все суммы в ранее оформленных и внесённых в базу документах. Если нужно будет для счёта поменять курс, то просто деламем хранимую процедуру и меняем соответствующее поле во всех необходимых записях. Удачи! ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 11:06 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Дмитрий Мыльников> нужно перевести в одну систему. В доллары, евро или рубли. Иначе никакой сортировки не получится. Компьютеру всё равно как мы цену измеряем. Он биты в байтах считает. :) >В общем, нужно ещё одно поле завести, которое будет указывать вид валюты. В принципе это же можно сделать и "на лету" используя select t.*, ... from (select ... as x, ...) as t, ... order by x; внутренний селект переведет все в одну систему, положит в поле x, а внешний отсортирует и получится чистый SQL. Производительность не обсуждается. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 11:23 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Код: plaintext ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 11:29 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  с127 сработает не везде Oracle примет, а вот IB нет ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 11:32 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  во второй версии ФБ обещают сделать. в рассылке уже идет обсуждение. (мечтательно вздыхая) а может в 1.6 сделают :-) ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 11:50 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Лучше иметь следующую структуру: Table Sales Goods Money_ID Price Здесь хранятся собственно цены на товары (услуги). Table Money Money_ID Money_Name Здесь хранится список валют. Table Money_Course Money_ID Course_Date Course Здесь хранятся курсы валют на определенную дату. Желателен уникальный ключ по идентификатору+дата, или контроль в хранимой процедуре. Тогда легко получим цены на любой период одним простым селектом select Goods, S.Price*C.Course as RUB, M.Money_Name, C.Price from Sales S, Money M, Money_Course C where S.Money_ID=M.Money_ID and S.Money_ID=C.Money_ID and C.Course_Date=(select max(CS.Course_Date) from Money_Course CS where CS.Date<=:Def_Date CS.Money_ID=M.Money_ID) Переменная :Def_Date задается при необходимости вычислить цену в предыдущем периоде. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 12:56 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Дмитрий Мыльников, "Только сразу поределитесь с тем, какая валюта будет базовой" А как быть, если базовая валюта постоянно меняется? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 14:37 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  это она для пользователя меняется, а в базе будет одна. просто у каждой валюты есть коэффициент пересчета. у базовой он равен еденице. меняется базовая, пересчитываются коэффициенты таким образом, чтобы базовый коэффициент стал еденицей. а остальные меняются пропорционально. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 14:57 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Да наверное и менять ничего не надо ... Пропорции то остаются... ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 14:59 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Если структура такова, что все расчеты крутятся вокруг одной, "базовой" валюты, а потом она вдруг меняется, наступает ж ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 15:20 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  2 StarWind >с127 > сработает не везде > Oracle примет, а вот IB нет Все правильно, я не претендую на лучшее решение. В крайнем случае можно внутренний селект вынести во view, они по-видимому даже в FB есть. На всякий случай: в аксессе аналогом вью являются query. Шутка. Кстати при внезапной замене базовой валюты мой вариант может и не сломается. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 18.08.2003, 23:08 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Что значит "базовая валюта меняется и наступет ж..."?! :) Базовая валюта это как 0 в системе координат. Его можно переместить, но совсем убрать невозможно. Допустим Вы удалили строчку с базовой валютой из таблицы. Ну и что? По сути это ведь не параметр базы данных, а некое условное понятие. У оставшихся валют коэффициенты остались на месте, так что программа будет продолжать работать как и раньше. В принципе можно вообще использовать систему измерения напрмиер в попугаях. Только при этом нужно чётко поределиться с коэффициентами пересчёта всех используемых валют в попугаи. :) На самом деле базовая валюта это понятие в сознании оператора. И нужно это понятие для того, чтобы оператор знал какие коэффициенты в базу вводить. Естественно, что если Вы или Ваше Начальство решило сменить базовую валюту, то придётся заново расчитать и ввести коэффициенты (курсы) для всех валют. А как по другому-то? Если у Вас есть решение, то поделитесь, буду очень благодарен. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.08.2003, 12:36 | 
  
  
  
   | 
||
| 
 
ORDER BY PRICE 
 | 
|||
|---|---|---|---|
| 
 #18+ 
    
  Дмитрий Мыльников  Что значит "базовая валюта меняется и наступет ж..."?! :) Базовая валюта это как 0 в системе координат Верно мыслим :) Курс ВСЕГДА привязан к некоторой базовой валюте, следовательно если до часа "Ч" у нас была валюта "тугрик", то и курс валют мы указывали в тугриках, а вот после часа "Ч" (после смены базовой валюты на "попугаи") курс должен быть указан в попугаях. Соответственно так же будут указаны и цены на товар, в данном конкретном случае. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 19.08.2003, 13:34 | 
  
  
  
   | 
||
| 
 | 

start [/forum/topic.php?desktop=1&fid=32&tid=1546872]:  | 
    0ms | 
get settings:  | 
    8ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    3ms | 
check topic access:  | 
    3ms | 
track hit:  | 
    45ms | 
get topic data:  | 
    11ms | 
get forum data:  | 
    2ms | 
get page messages:  | 
    47ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 239ms | 
| total: | 373ms | 

| 0 / 0 | 

    Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
    
    
    «На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
    
    
    ... ля, ля, ля ...