|
вопрос знатокам sql | ☑ | ||
---|---|---|---|---|
0
Gorr
08.05.14
✎
15:49
|
есть 2 таблички:
поля первой таблички: товар, количество например товарА 10 поля второй талички: товар, количество, склад пример товарА 7 Склад1 товарА 2 Склад2 в результате нужно получить таблицу: товарА 7 Склад1 товарА 2 Склад2 товарА 1 ПустаяСсылка Благодарю! |
|||
1
Ненавижу 1С
гуру
08.05.14
✎
15:52
|
это баян
накопление сортировкой по складам (таблица 2 сама с собой) потом вычитание, было уже |
|||
2
Gorr
08.05.14
✎
15:56
|
(1) примерчик пожалуйтста. очень нужно!
Уточнение во второй таблице может быть не весь товар который есть в первой. поэтому без первой не получится. |
|||
3
Gorr
08.05.14
✎
15:59
|
+2 таким образом еще раз:
таблица1 товарА 10 товарБ 3 таблица2 товарА 7 Склад1 товарА 2 Склад2 результат: товарА 7 Склад1 товарА 2 Склад2 товарА 1 ПустаяСсылка товарБ 3 ПустаяССылка |
|||
4
Дык ё
08.05.14
✎
16:01
|
||||
5
Gorr
09.05.14
✎
19:42
|
Накопление второй таблицы соединением дает:
товарА Склад1 7 7 товарА Склад2 2 9 соединением с первой по товару и вычислением можно получить товарА Склад1 7 товарА Склад2 9 но как из этого получить даже в самом простом варианте товарА Склад1 7 товарА Склад2 9 товарА Null 1 совершенно непонятно. нужен хелп! |
|||
6
Gorr
09.05.14
✎
19:44
|
поправка
товарА Склад1 7 товарА Склад2 2 товарА NULL 1 |
|||
7
GANR
09.05.14
✎
20:38
|
(3) И чего тут сложного?
ВЫБРАТЬ Товар КАК Товар, Значение(Справочник.Склады.ПустаяСсылка) КАК Склад, Количество КАК Количество ИЗ Таблица1 ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Товар, Склад, Количество ИЗ Таблица2 Оно? |
|||
8
Gorr
09.05.14
✎
21:28
|
вот в конкретном примере да, но если количество первой будет равно количеству во второй или даже меньше, тогда строка с пустым складом будет лишней. задачу нужно решить в общем виде.
|
|||
9
Gorr
09.05.14
✎
21:35
|
(7) и в чистом виде таблицу2 использовать нельзя - (1) правильно заметил, что нужен накопительный итог распределения по складам из 2й таблицы
|
|||
10
Gorr
09.05.14
✎
21:57
|
возможно поможет вводндополнительная вводная: суть таблицы 1 это заказанный тровар весь, а суть 2й - та часть товара который заказан из наличия из конкретного склада причем один и тот же товар может быть заказан с разных складов. необходимо получить информацию по количеству по всем товарам в разрезе складов
|
|||
11
Fragster
гуру
09.05.14
✎
22:34
|
чувак хочет фифо запросом
|
|||
12
Fragster
гуру
09.05.14
✎
22:34
|
намного эффективнее постобработкой. Ну, или там через итоги, например
|
|||
13
GANR
09.05.14
✎
22:42
|
(11) ФИФО запросом - да это вообще последнее дело. Запросом это во-первых алгоритмически сложнее, чем кодом, а во-вторых медленнее и ресурсы отъедает.
|
|||
14
program1Cer
10.05.14
✎
07:53
|
ВЫБРАТЬ "ТоварА" , 10 ПОМЕСТИТЬ Таб1
; ВЫБРАТЬ "ТоварА" , 7, "Склад1" ПОМЕСТИТЬ Таб2 ОБЪЕДИНИТЬ ВЫБРАТЬ "ТоварА" , 2, "Склад2" ; ВЫБРАТЬ Поле1, Поле2, Поле3 ИЗ Таб2 ОБЪЕДИНИТЬ ВЫБРАТЬ Таб1.Поле1, Таб1.Поле2 - ВложенныйЗапрос.Поле2, "ПустаяСсылка" КАК Поле3 ИЗ Таб1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ Поле1, Сумма(Поле2) Как Поле2 ИЗ Таб2 СГРУППИРОВАТЬ ПО Поле1 ) КАК ВложенныйЗапрос ПО Таб1.Поле1 = ВложенныйЗапрос.Поле1 |
|||
15
program1Cer
10.05.14
✎
07:57
|
Это и соответствует твоей вводной, во вложенном запросе считает сколько у нас всего заказано по складам, потом вычитаем из общего числа заказов товара (Таб1), это и будет то количество, которое без склада.
Зачем здесь накопительный итог по складам? |
|||
16
program1Cer
10.05.14
✎
08:17
|
И на ЛЕВОЕ СОЕДИНЕНИЕ надо переделать)
|
|||
17
ice777
10.05.14
✎
10:55
|
(0) конструктор для кого придуман?
|
|||
18
Gorr
10.05.14
✎
20:58
|
(11), (13) фифо запросом нет не надо мне, не знаю такого)))
Все намного проще: если взглянуть на таблицу заказов и резервов, первое что бросается в глаза это то, что таблица 2 или таблица резервов содержит практически готовый результат. если это увидеть, то результат будет равен тому чего нет в резерве объединенное с резервом. т.е. результат = резерв + (заказ - резерв). для получения части которой нет в резерве можно предварительно резерв свернуть по товару в пакетном запросе. таким образом (15) да, не нужно никакого накопительного итога. НО это все валидно только при условии, что таблица резервов не больше таблицы заказов заказ >= резерв. К сожалению, в моем случае количество из таблицы резервов не факт что не больше таблицы заказов((( Таким образом, видимо, без накопительного итога по складам не обойтись, и , поскольку накопительный итог считается по всем строкам таблицы в независимости от того какой товар в текущей строке: товарА склад1 7 7 товарА склад2 2 9 товарБ склад1 3 12, а не товарА склад1 7 7 товарА склад2 2 9 товарБ склад1 3 3 , то вычисление распределение товара по складам придется вычислять запросом по каждому товару отдельно в цикле, а результат накапливать выгружая, например, в таблицу значений. (17) может для тебя?) |
|||
19
Gorr
10.05.14
✎
21:49
|
(15)
выбрать * из таб2 объединить выбрать товар, сумма(заказ) - сумма(резерв),"ПустойСклад" из ( выбрать з.товар,з.к заказ, 0 резерв из таб1 з объединить выбрать р.товар,0,р.к резерв из таб2 р) вз сгруппировать по товар имеющие сумма(заказ) - сумма(резерв)>0 |
|||
20
program1Cer
11.05.14
✎
07:06
|
(18) > К сожалению, в моем случае количество из таблицы резервов не факт что не больше таблицы заказов(((
(10) > суть таблицы 1 это заказанный тровар весь Давай ты определишься с условиями задачи. Я исходил естественно из 10 сообщения и для него мой ответ верный. |
|||
21
Fragster
гуру
11.05.14
✎
12:59
|
(18) что же тебе надо, как не фифо по складам?
|
|||
22
Gorr
11.05.14
✎
14:47
|
(21) а что такое в вашем понимании фифо по складам?
в моем фифо это понятие из учетной политики для оценки себестоимости товара при списании (20) если бы это было так просто. задача нуждается в дальшейшем изучении.. |
|||
23
Fragster
гуру
11.05.14
✎
14:54
|
(22).1 остатки на 100 складах по одной штуке, а в заказе - 50. С каких складов надо забрать?
фифо, конечно неправильное название, в данном случае я его понимаю как "выбор по некой сортировке" и его проще делать именно что постобработкой. |
|||
24
program1Cer
11.05.14
✎
15:08
|
А то что у него в таблице есть значения вообще без склада, ты как-то пропустил. Нет тут "выбора по некой сортировке", задача о другом.
|
|||
25
Fragster
гуру
11.05.14
✎
15:32
|
(24) вообще без склада - это потому что на всех складах кончилось, и это простейший случай - так как со всех складов забираем все и "остается" строка с разницей суммы остатков и количества заказа
|
|||
26
program1Cer
11.05.14
✎
15:42
|
(25) В целом я так же понял, только где тут выбор? Что мы выбираем? Банальное определение того, что товар заказали, но на складах его не хватает. Но у автора, видимо, образовалась ситуация, когда количество заказов меньше, чем заказов в разрезе складов. Нормальная это ситуация или нет, он выясняет =) а пока решил закрыть на это дела глаза условием
имеющие сумма(заказ) - сумма(резерв)>0 пусть это будет на его совести) |
|||
27
Fragster
гуру
11.05.14
✎
15:44
|
(26) потому что "выбор по сортировке" будет универсальным. А если немного модифицировать, то можно собирать N заказов с M складов за один проход результата, если он правильно отсортирован
|
|||
28
Fragster
гуру
11.05.14
✎
15:46
|
(27)+ но да, когда мы дойдем до необходимости оптимизировать сборку одного заказа и при этом доля заказов больше, чем все остатки будет велика - то да, предварительная проверка может быть уместна.
|
|||
29
Fragster
гуру
11.05.14
✎
15:46
|
(28) вопрос в том, когда мы до такой ситуации дойдем и сколько такая "оптимизация" даст профиту
|
|||
30
program1Cer
11.05.14
✎
16:01
|
(27) А автору надо собрать N заказов для M складов? Ты его цели знаешь (документ, отчет, обработка) ? А уже говоришь о универсальном решении.
|
|||
31
Fragster
гуру
11.05.14
✎
17:30
|
(30) просто я телепат
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |