Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Есть таблица плана : Номенклатуру,дата,количество. Номенклатура может стоять в плане на несколько дат. Номенклатура состоит из комплектующих(получаю рекурсивным запросом). Нужно получить сколько комплектующих требуется на каждую дату. Я циклом прохожу весь план и записываю комплектующие с датой во временную таблицу. Потом группирую по комплектующим и дате. Как лучше решить эту задачу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 11:20 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
ВаселинаКак лучше решить эту задачу?Рекурсивным CTE можно получить всё одним запросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 11:31 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Где же здесь рекурсия? Рекурсивным сте я получаю список комплектующих на каждую номенклатура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 12:05 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Васелина, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 12:25 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Если по датам: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 12:28 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Васелинаalexeyvg, Где же здесь рекурсия? Рекурсивным сте я получаю список комплектующих на каждую номенклатура.А, извиняюсь. невнимательно прочитал. Так осталось самое простое - добавить в запрос в нужных местах SUM, COUNT и GROUP BY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 13:06 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Kopelly, With cte as (Select сборка, Дата, КолВо From План Where Дата Between @ДатаНач and @ДатаКон Union all Select b.Деталь, a.Дата, b.КолВо * a.КолВо --Количество сборок в плане * на количество деталей в сборке From cte a join Сборки b on a.Деталь = b.сборка) Select Деталь,Дата,Sum(КолВо) as ОбщееКоличество From CTE a Where not exists (Select 1 From Сборки b Where a.Деталь = b.Сборка) Group by Деталь,Дата В плане стоят стоят сборки, а не детали. Запрос зациклился.Рекурсия превышает 100. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 13:26 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Васелина, Если бы не было поля дата , то можно поставить SUm , group. b и связать две таблицы по изделию. Но в таблице План Изделие повторяется несколько раз и в таблице с комплектующими изделие повторяется на каждую комплектующую. Количество комплектующих суммируется неправильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2018, 13:41 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Васелина, Давай пример данных - советы будут предметнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 05:43 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Kopelly, Задача стоит такая. Есть план на месяц. Который состоит из ежедневных планов. Номенклатура может повторяться . Пример таблицы изделие1 01-06-2018 5 изделие1 02-06-2018 3 изделие1 03-06-2018 1 изделие2 04-06-2018 4 изделие1 04-06-2018 5 Есть таблица иерархическая комплектующих и материалов изделий Мне нужно на каждый день вытащить расход краски. Я циклом обхожу таблицу план вытаскиваю рекурсивным сте комплектующие по каждому изделию и выбираю краску и записываю данные во временную таблицу. Потом с ней работую. Можно ли эту задачу решить без цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 08:13 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
ВаселинаМожно ли эту задачу решить без цикла. можно. Ваше рекурсивное cte совсем не обязательно применять к каждому изделию, отберите список изделий и рекурсивно начитайте по ним все нужные комплектующие. более предметный ответ как уже неоднократно сказали, требует полного набора тестовых данных. и код Ваш покажите, если не жалко :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 08:21 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
ВаселинаKopelly, Задача стоит такая. Есть план на месяц. Который состоит из ежедневных планов. Номенклатура может повторяться . По идее 21490650 решает такую задачу. Либо расписывай структуру всех таблиц (с наименованием и назначением полей), либо ищи ошибку в переносе логики под свои данные, либо просто выложи текст запроса который приводит к зацикливанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 09:02 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Kopelly, with T(spvx,kodizd,kodsb,kodvx, kol,lv) AS (SELECT spvx,s.kodizd,s.kodizd as kodsb,kodvx, kol, 1 AS lv FROM sostav s ,(select kodizd from plano where dataz between '01-06-2018' and '30-06-2018' group by kodizd) as p WHERE s.kodizd=p.kodizd UNION ALL SELECT s.spvx, s.kodizd,t.kodvx as kodsb,s.kodvx, s.kol*t.kol, t.lv + 1 AS lv FROM (sostav s inner join t on ( s.kodizd = t.kodvx )) ) SELECT kodvx as Код, i1.izd as vxod,i2.izd ,lv ,kol FROM ( T inner join izd i1 on (i1.Код=t.kodvx ) inner join izd i2 on i2.Код=t.kodsb ) where i1.izd='Краска' order by lv Сдесь группировка только по изделиям. Он не зацикливается . Но результат выдает неправильно. Увеличивает с строки изделие , комплектующие количество пропорционально количеству строк комплектующих в составе изделия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 11:35 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Если я еще и дату добавлю в группировку то еще увеличивается пропорционально количеству строк по номенклатуре в плане. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 11:37 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Васелина, Если так? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Увеличивает с строки изделие , комплектующие количество пропорционально количеству строк комплектующих в составе изделия. Логично если в каждом комплектующем изделия есть "Краска" - группирок то нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2018, 12:50 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Kopelly, Запрос работает неправильно ,Краска может входить в разные сборки , при этом сами сборки могут входить в разные сборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2018, 15:35 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Что-то я не понял каким образом Номенклатура и Краска зависят друг от друга? А чем обычная группировка не помогает? Зачем вообще ТУТ Рекурсия и сборка данных на Номенклатуру? Где Тут отношение М:М, если ты указал ТОЛЬКО одну таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2018, 16:14 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
НиколайСН, Видимо там многопередельное производство. (что подтверждается последним постом) С достаточно стандартной схемой данных комплектов. И автор не удосужилась всё это описать, уповая на телепатические способности коллег. и обыденность ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 03:31 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
982183, Вы правы. Хотелось бы узнать . Как правильнее реализовать механизм разузлования номенклатуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 08:43 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Последовательным разукомплектованием. Другого способа нет. если бы вы привели тестовый пример комплектов (например здесь - http://sqlfiddle.com/ ) и в кратко описали структуру данных, то можно было бы говорить более предметно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 08:54 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Тем более, что возможна ошибка в описании комплектов, при которой возникает зацикливание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 09:22 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
ВаселинаKopelly, Задача стоит такая. Есть план на месяц. Который состоит из ежедневных планов. Номенклатура может повторяться . Пример таблицы изделие1 01-06-2018 5 изделие1 02-06-2018 3 изделие1 03-06-2018 1 изделие2 04-06-2018 4 изделие1 04-06-2018 5 Есть таблица иерархическая комплектующих и материалов изделий Мне нужно на каждый день вытащить расход краски. Я циклом обхожу таблицу план вытаскиваю рекурсивным сте комплектующие по каждому изделию и выбираю краску и записываю данные во временную таблицу. Потом с ней работую. Можно ли эту задачу решить без цикла. Я так понял что имеется всё-таки 2 таблицы, где одна из них имеет тип фактовой (значения по расходу краски) и Нормативно справочную (таблица иерархическая комплектующих и материалов изделий). Тем более тогда не понимаю зачем тебе рекурсия, тем более это делается скорее всего одним запросом по связке [KEY] и [PARENT_KEY], ибо я увидел только 2 уровня НСИ: Изделие и Комплектующие. Если тебе надо посчитать количества комплектующих (краски) за определенную дату, то это делается SUM() с банальным Джоином 2-х этих таблиц и группировкой (GROUP BY) по дате. Или же я не понимаю? В идеале конечно же хотелось бы более правильно поставленную задачу, не уповая на телепатию архитектуры Вашей БД, где описано: ДАНО и ВОПРОС ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 11:57 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
НиколайСН, У неё многопередельное производство. Пельмени=тесто+фарш Тесто=мука+яйца Фарш=мясо+сало+соя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 12:04 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Как найти краску я знаю. Нахожу все изделия рекурсивным запросом в которые входит краска и стыкую с планом изделий на месяц по датам, получается запрос один ко многим. А как разузловать всю номенклатуру по всем комплекутющим и материалам без цикла я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 13:13 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
982183, Ну если так, то ДА, рекурсией собирается элементарно - выше примеры. Ну а дальше кто мешает выполнить GROUP BY и сделать SUM обычным запросом? типа: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Значения уже имеются от рекурсии, значит и сама краска уже посчиталась и там лежат значения. Разве это не тот самый вопрос что ставился в начале обсуждения: сколько краски надо по датам? Да собстна, уже есть примеры выше, осталось мизер допилить и готово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 13:14 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1689547]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 435ms |

| 0 / 0 |
