|
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/search_topic.php?author=trepol&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 23966ms |
total: | 24276ms |
0 / 0 |