|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Здравствуйте, Уважаемые знатоки SQL/ Подскажите, (самые общие рекомендации) как написать запрос для решения следующей задачи: Есть 2 таблицы Таблица 1 ОСТАТКИ имеет поля ТОВАР Дата Остаток шт Таблица 2 ДВИЖЕНИЕ имеет поля ТОВАР ДАТА Код Транзакции (где 1-это Приход товара, а 2- это расход товара) Остаток шт Мне необходимо проссумировать поле ОСТАТОК для выбранного товара в таблице ДВИЖЕНИЕ по коду 1, затем проссумировать поле ОСТАТОК для выбранного товара этой же таблицы по коду 2 Посчитать разность между суммой по коду1 и суммой по коду 2 ( то есть приход - расход) А затем, к полученной разности добавить остаток для этого же товара из таблицы ОСТАТКИ ( поле Остаток_шт) Скажите, как в самом общем виде организовать разность между приходом и расходом? А затем к ней прибавить остаток из таблицы 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 13:21 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Александр_022, как на мой взгляд - всю движуху товара крутить только на двух таблицах - забодаетесь. Попробуйте лучше продумать базу, распределить тот же приход, расход и остатки в разных таблицах (даже - в связках таблиц). Тогда и намного проще и логичнее будет организовать статистику. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 13:28 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
В Таблице 1 (Остатки) поле ТОВАР - уникально, или есть дубли? если второе - для одного товара ДАТА уникальная или есть дубли? В таблице 2 (Движение) для любого товара дата гарантированно больше максимальной даты из первой таблицы? гарантированно не меньше? может быть меньше? Поле Остаток - это на самом деле количество (т.е. на сколько изменилось) или действительно остаток (сколько стало после изменения)? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:09 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Александр_022, я делаю другую схему таблиц Таблица 1 ОСТАТКИ имеет поля ТОВАР Дата Остаток входной Остаток выходной Таблица 2 ДВИЖЕНИЕ имеет поля ТОВАР ДАТА Код Транзакции (где 1-это Приход товара, а 2- это расход товара) количество остатки считаю запросом, не портя входного остатка можно сосчитать остаток на любой день ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:21 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
забыла убрать дату Таблица 1 ОСТАТКИ имеет поля(это и справочник товаров) ид ТОВАР наименование товар ед изм Остаток входной Остаток выходной ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:24 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Отдельные таблицы для прихода и расхода - плохой совет. Получить в запросе отдельно приход и расход легко: IIF([Код Транзакции] = 1, [Остаток шт], 0) As Приход, IIF([Код Транзакции] = 2, [Остаток шт], 0) As Расход Вы не объяснили задачу. Движение и остатки считаются по каждой дате или за период? Что касается Таблица 1 ОСТАТКИ, то тут есть вопросы. В ней есть остатки по товару на каждую дату, присутствующую в Таблица 2 ДВИЖЕНИЕ или надо искать ближайшую предшествующую? Вообще, проще и логичнее хранить входящие остатки на начало учета (одна запись для каждого товара). ЗЫ. По хорошему для списка товара нужна отдельная таблица, а в ваших таблицах хранить значения ключей из нее. ЗЗЫ. Просто интересно, почему в Таблица 2 ДВИЖЕНИЕ поле называется "Остаток шт"? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 14:48 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), кому как. У меня, например, пара таблиц (главная + подчинённая) - на набивку прихода, две пары - для двух касс, три пары - для хранения архивов прихода/расхода, + таблица на остатки. В итоге приход и две кассы одновременно работают с одной базой, не мешая друг другу. Причём работают только с непосредственной "движухой", всё проведенное ранее - в архиве. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 15:26 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Здравствуйте, Анатолий. Это не моя база. Был на собеседовании в одной фирме по вакансии маркетолог-аналитик. Там дали такое задание. Я его,естественно, не сделал. Просто интересно, как его решить. В таблице 1 остаток каждого товара на последнюю дату месяца до 31 марта 2017г А в таблице 2 движение каждого товара на каждую дату, начиная с 01 апреля 2017г. В таблице 2 поле ОСТАТОК шт названо неправильно. Правильней - ДВИЖЕНИЕ ТОВАРА. Задание было: Выбери товар АРБИДОЛ и дай остаток на 18 апреля 2017г ПОэтому я решил, что нужно взять остаток арбидола на 31 марта из таблицы1. И прибавить к нему разность между приходом и расходом по арбидолу за 01-18 апреля Далее UNION ALL... GROYP BY.... Но вот как посчитать разность в таблице 2 между приходом и расходом не знаю.... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 16:41 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Александр_022как посчитать разность в таблице 2 между приходом и расходом не знаю.... Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 16:52 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
У IIF скобки потерялись... ну да пофиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2017, 16:52 |
|
Вопрос по SQL (запрос)
|
|||
---|---|---|---|
#18+
Ну, если в "ОСТАТКИ" для АРБИДОЛ только одна запись, то можно так: Код: sql 1. 2. 3. 4.
Если запись в "ОСТАТКИ" есть всегда, даже при остатке =0, то можно обойтись без NZ() и вместо LEFT JOIN просто JOIN. Кроме того, для единственного товара можно обойтись и без GROUP BY. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.05.2017, 10:11 |
|
|
start [/forum/topic.php?fid=45&fpage=75&tid=1612413]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 336ms |
total: | 454ms |
0 / 0 |