Учет товара по нескольким складам ???
Была база (мс_аццесс) в которой велся учет товара по одному складу. И тут вдруг понадобилось переделать на 3 (или 4) склада. Было все просто - Таблица "товары" где есть уникальный номер (код) товара, количество и т.д.
вот и кидай его куда хочешь. А теперь - ??? Как учесть движение товара со склада_1 на склад_2 (к примеру). Т.е. как правильно фиксировать принадлежность товара к складу_Х, при этом не меня его (товара) уникальный номер (код).
Я вот думаю может в таблице "товары" создать поля склад_1 .. склада_х и в них учитывать количество товара на данном складе. Дайте советы или поругайте меня в пух и прах.
Не знаю как лучше поступить?
Была база (мс_аццесс) в которой велся учет товара по одному складу. И тут вдруг понадобилось переделать на 3 (или 4) склада. Было все просто - Таблица "товары" где есть уникальный номер (код) товара, количество и т.д.
вот и кидай его куда хочешь. А теперь - ??? Как учесть движение товара со склада_1 на склад_2 (к примеру). Т.е. как правильно фиксировать принадлежность товара к складу_Х, при этом не меня его (товара) уникальный номер (код).
Я вот думаю может в таблице "товары" создать поля склад_1 .. склада_х и в них учитывать количество товара на данном складе. Дайте советы или поругайте меня в пух и прах.
Если у тебя № товара уникален на всех складах вместе и количество складов у тебя заранее известно, то сделай новую таблицу типа:
№Товара |кол-во на Склад1 | к-л на Склад2...
--------------------------------------------
001 | 5 | 2
002 | 10 | 0
............................
Соответственно ключ это номер товара, и свяжи её с таблицей "Товар" в которой так и будет содержаться вся инфа на товар.
tovar_id | sklad_id | amout
-----------------------------------
1 | 1 | 16
1 | 2 | 8
2 | 1 | 20
2 | 2 | 17
-----------------------------------
ВОПРОС? как мне потом с помощью SELECT запроса можно получить такую таблицу
tovar_id | kol-vo_na_sklad_1 | kol-vo_na_sklad_2 ...
--------------------------------------------------------------
1 | 16 | 8
2 | 20 | 17
--------------------------------------------------------------
хорошо, предположим я создам таблицу "Расположение_товара" с полями tovar_id, sklad_id, amout и таким образом получу (к примеру) -
tovar_id | sklad_id | amout
-----------------------------------
1 | 1 | 16
1 | 2 | 8
2 | 1 | 20
2 | 2 | 17
-----------------------------------
ВОПРОС? как мне потом с помощью SELECT запроса можно получить такую таблицу
tovar_id | kol-vo_na_sklad_1 | kol-vo_na_sklad_2 ...
--------------------------------------------------------------
1 | 16 | 8
2 | 20 | 17
--------------------------------------------------------------
Я предлогал несколько другой вид таблицы. А именно, такой в каком виде ты хочешь иметь выходные данные.
tovar_id | kol-vo_na_sklad_1 | kol-vo_na_sklad_2 ...
--------------------------------------------------------------
1 | 16 | 8
2 | 20 | 17
--------------------------------------------------------------
то с помощью SELECT ... UNION ... SELECT можно получить
tovar_id | sklad_id | amout
-----------------------------------
1 | 1 | 16
1 | 2 | 8
2 | 1 | 20
2 | 2 | 17
-----------------------------------
а вот как если бы обратно - я не знаю, поэтому и спрашивал.
Мне нравиться эта идея. Дело в том что если будет таблица
tovar_id | kol-vo_na_sklad_1 | kol-vo_na_sklad_2 ...
--------------------------------------------------------------
1 | 16 | 8
2 | 20 | 17
--------------------------------------------------------------
то с помощью SELECT ... UNION ... SELECT можно получить
tovar_id | sklad_id | amout
-----------------------------------
1 | 1 | 16
1 | 2 | 8
2 | 1 | 20
2 | 2 | 17
-----------------------------------
а вот как если бы обратно - я не знаю, поэтому и спрашивал.
Мне тоже что-то ничего в голову не приходит. Была бы СУБД по серьёзней, тогда это было бы просто, а здесь видимо придётся делать это в перемешку с VBA в несколько запросов, а потом уже выводить.
SELECT Table1.tovar_id, Sum(Table1.amout) AS [Total Value]
FROM Table1
GROUP BY Table1.tovar_id
PIVOT "kol-vo_na_sklad_sklad_" & [sklad_id];
or
(select amount from tovary t2 where t1.tovar_id = t2.tovar_id AND sklad_id = 1) as kol-vo_na_sklad_1,
(select amount from tovary t2 where t1.tovar_id = t2.tovar_id AND sklad_id = 2) as kol-vo_na_sklad_2,
...
FROM tovary t1
ВОТ. .но я пока это не тестил.
Мне тут добрые люди, на других форумах, .но я пока это не тестил.
Если количество складов статично, то да.
Не знаю как лучше поступить?
Была база (мс_аццесс) в которой велся учет товара по одному складу. И тут вдруг понадобилось переделать на 3 (или 4) склада. Было все просто - Таблица "товары" где есть уникальный номер (код) товара, количество и т.д.
вот и кидай его куда хочешь. А теперь - ??? Как учесть движение товара со склада_1 на склад_2 (к примеру). Т.е. как правильно фиксировать принадлежность товара к складу_Х, при этом не меня его (товара) уникальный номер (код).
Я вот думаю может в таблице "товары" создать поля склад_1 .. склада_х и в них учитывать количество товара на данном складе. Дайте советы или поругайте меня в пух и прах.
Допустим имееш 3 склада.
Нужно создать временную таблицу tbTotal с 4-мя столбцами.(TovarId, Sklad1Kol, Sklad2Kol, Sklad3Kol)
INSERT INTO tbTotal
SELECT TOVAR, AMOUNT, 0,0 FROM Table1 WHERE sklad_id=1
INSERT INTO tbTotal
SELECT TOVAR, 0, AMOUNT, 0 FROM Table1 WHERE sklad_id=2
INSERT INTO tbTotal
SELECT TOVAR, 0, 0, AMOUNT FROM Table1 WHERE sklad_id=3
и наконец
SELECT TovarId, SUM(Sklad1Kol), SUM(Sklad2Kol), SUM(Sklad3Kol)
FROM tbTotal Group By TovarId
Но об эффективности лучше не вспоминать.
Если имеешь больше 3 склада, то SQL выражения лучше бы
построить программно в цикле.
Если количество складов статично, то да.
ИМХО даж если ко-ло не статично, то можно запрос в цикле построить.