Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Запрос много ко многим
|
|||
|---|---|---|---|
|
#18+
Пример подогнан под 10 единиц краски в каждом изделии: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. На мой взгляд результат верный: datazКодizdkol_izdvxodKol2018-06-01200Изделие-15Краска50 2018-06-02200Изделие-13Краска30 2018-06-03200Изделие-11Краска10 2018-06-04200Изделие-15Краска50 2018-06-04200Изделие-24Краска40 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 13:58 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1689547]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 456ms |

| 0 / 0 |
