Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как составить оптимальный запрос? [D5, IB6.x]


Страницы:   1 2

Lika ©   (2004-08-11 11:43:00) 

Есть одна таблица в которой хранится приход товара и расход товара т.е состоит из полей "код товара", "кол-во", "цена"... и есть поле "тип" в котором, если значение =0, то это приход, если начение =1, то это расход. Нужно найти остатки товаров. Подскажите самый оптимальный способ это сделать, может запросом или несколькими, а может еще как?


Sergey13   (2004-08-11 15:34:00) [1]

2[24] Lika   (11.08.04 15:31)
>Вот и хочется позаимствовать чужой опыт, в таких вопросах:))
Вот и пиши сюда, спрашивай. 8-)


Lika   (2004-08-11 15:31:00) [2]


> Sergey13 ©   (11.08.04 15:24) [23]
> На отсутствии такой литературы толпы людей кормятся. Ты
> на что посягаешь? 8-)


Все ясно:)) Просто задачи часто попадаются уж очень типичные, с которыми большинство программистов сталкиваются. У меня конечно есть свои методы их решения, но не всегда они мне кажутся оптимальными. Вот и хочется позаимствовать чужой опыт, в таких вопросах:))


Sergey13   (2004-08-11 15:24:00) [3]

2[22] Lika   (11.08.04 14:35)
На отсутствии такой литературы толпы людей кормятся. Ты на что посягаешь? 8-)


Lika   (2004-08-11 14:35:00) [4]


> Danilka ©   (11.08.04 14:24) [20]
> Лучше все-таки раскрыть скобки, как в [18] Sandman25 ©  
>  (11.08.04 14:20)

Да, да правильно. Сразу не заметила.:)
А может кто-нибудь может дать ссылку на хорошую статью(литературу), где описанны правильные решения таких типовых задач. Может и структуру БД можно было бы удачнее построить, в общем не хотелось бы изобретать велосипед, когда он уже давно создан. Была бы очень признательна :)
Еще раз всем спасибо, что помогли!


Deniz   (2004-08-11 14:28:00) [5]

тип*2-1 и никаких гвоздей ... дробей


Danilka   (2004-08-11 14:24:00) [6]

[19] Lika   (11.08.04 14:22)
> -(тип-0.5)*2

Лучше все-таки раскрыть скобки, как в [18] Sandman25 ©   (11.08.04 14:20)
:))


Lika   (2004-08-11 14:22:00) [7]

Спасибо ребята всем большое!
-(тип-0.5)*2- это вообще прикольно, удачное решение, даже в голову не пришло :))
Еще раз всем спасибо!


Sandman25   (2004-08-11 14:20:00) [8]

[16] Danilka ©   (11.08.04 13:12)

Чтобы были только целочисленные операции, можно написать 1-2*tip


sniknik   (2004-08-11 13:16:00) [9]

Danilka ©   (11.08.04 13:12) [16]
да, бред получился. ;о))
написал а только после проверять стал.

> может-быть имелось ввиду это:
наверное, сммысл 1 и -1 получить (так хотел), у тебя вроде похоже. счас проверю.


Danilka   (2004-08-11 13:12:00) [10]

[15] sniknik ©   (11.08.04 13:01)
в смысле?

"тип" это либо 1 либо 0.
(тип*-1) получается что либо -1 либо 0, если 0 умножить на количество, то получим 0.

может-быть имелось ввиду это:
-(тип-0.5)*2
?


sniknik   (2004-08-11 13:01:00) [11]

а так не пойдет?

SELECT "код товара",  Sum(("тип"*-1)*"кол-во")
FROM "Есть одна таблица"
GROUP BY "код товара"


Sergey13   (2004-08-11 12:51:00) [12]

2[12] Lika   (11.08.04 12:46)
А чем [10] не устраивает?

>В этом случае одна запись будет являтся и приходом и расходом
Так делать не надо. Надо 2 записи в приходно-расходной таблице и одна запись в таблице документов на передачу. Ибо приход и расход на разных складах могут быть совершенно разными процессами и расходиться как во времени так и в количестве (как ни странно).


Sandman25   (2004-08-11 12:47:00) [13]

[12] Lika   (11.08.04 12:46)

Оптимальный вариант - записывать отрицательное количество для расхода + триггеры + срезы, о которых писал Danilka


Lika   (2004-08-11 12:46:00) [14]


> Danilka ©   (11.08.04 12:37) [11]
> Это уже другая таблица, другая идеология.

Да я согласна. Просто я хотела упростить вопрос вначале. С первым вариантом я для себя уже уяснила, -1 и 1 это спамый удачный вариант. Хочу еще второй вариант прояснить.
Я вообще понимаю что такие задачи они типичные, но мне бы хотелось узнать оптимальный вариант их решения?


Danilka   (2004-08-11 12:37:00) [15]

[7] Lika   (11.08.04 12:33)
> т.е есть поля "склад прихода", "склад расхода"

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


Sergey13   (2004-08-11 12:37:00) [16]

2[7] Lika   (11.08.04 12:33)
select sklad,tovar,sum(kol*tip) from table
group by sklad,tovar


Sandman25   (2004-08-11 12:36:00) [17]

[7] Lika   (11.08.04 12:33)

2 записи закладывать, по одной для каждого склада. И никаких полей типа откуда и куда. Только куда.


Danilka   (2004-08-11 12:35:00) [18]

Ну, если здеся ярмарка вариантов, то тогда можно еще одно поле добавить, заполняемое триггером, куда писать кол-во с плюсом для прихода и с минусом для расхода тогда вообще ничего умножать не надо будет. :))

А вообще, при такой постановке когда-нибудь возникнет ситуация, что динамически рассчитывать остатки с начала времен станет очень накладно по-времени. И придется сделать отдельный регистр для хранения остатков, либо текущих, либо, остатки с определенной периодичностью, например, на начало каждого месяца.


Lika   (2004-08-11 12:33:00) [19]

Спасибо большое, такой вариант меня конечно очень бы устроил - все решилось бы одним запросом. Я об этом тоже думала. А если несколько складов, т.е есть поля "склад прихода", "склад расхода" , для какого-то склада это приход, а для какого-то расход, тогда как быть? Что записывать в поде "тип"? .....


Sergey13   (2004-08-11 12:29:00) [20]

2 stas_x   (11.08.04 12:21)
Можно, если на 0 и 1 е завязана другая функциональность. Мало ли.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо