Рекурсия в запросе #394779


#0 by DRAGO
Можно сделать рекурсию в запросе. Напримерпо затратам, если есть по определенной затрате сведения, то и ее перебирать и т.д.
#0 by DRAGO
Можно сделать рекурсию в запросе. Напримерпо затратам, если есть по определенной затрате сведения, то и ее перебирать и т.д.
#1 by Salvador Limones
Как? Расскажи!
#2 by DRAGO
Это вопрос...
#3 by vde69
нельзя, да и глупость это несусветная... можно сделать рекурсию в ХП но это то-же глупость будет
#4 by H A D G E H O G s
Что такое рекурсия?
#5 by DRAGO
почему глупость. Как же тогда построить отчет? Только перебором?
#6 by DmitrO
В 8ке нельзя, в MSSQL 2005 можно. ух ты.. категорично, и очень уверено.. "а мужики-то незнают"
#7 by vde69
почитай про реляционные базы, про JOIN и т.д. учи язык запросов
#8 by Salvador Limones
Блиннн, не увидел в теме знаков вопроса. Думал, ты сейчас мастер-класс рекурсии в запросе покажешь.
#9 by hhhh
как все отчеты строятся, так и этот построй. Какое отношение рекурсия имеет к отчету. Наверно, ты про расшифровку спрашивал, а не про рекурсию.
#10 by i-rek
В СКД можно некоторым образом
#11 by vde69
до 2005 существовал предел на 255 таблиц, это главное было
#12 by Новиков
в языке запросов рекурсии нет. И слава б-гу!
#13 by DRAGO
ПРОДУКЦИЯ                            |Сумма ВО КАК ХОТЯТ ВИДЕТЬ! Все к одному регистру.
#14 by Sadovnikov
Еще как есть.
#15 by DRAGO
ну блин намекните хоть как это должно быть
#16 by Новиков
:) еще как нет
#17 by Sadovnikov
Ну-ну. BOL полистай.
#18 by Новиков
в 8-шном языке запросе полистать BOL? Страничку в желтой книжке не подскажешь? :)
#19 by Sadovnikov
А в восьмерке - язык запросов?? Убожество там, а не запросы.
#20 by DRAGO
А что такое BOL?
#21 by Новиков
а автор поста на чем пишет? на T-SQL?
#22 by Sadovnikov
Books Online
#23 by Sadovnikov
Вот честно - мне пофиг на чем автор пишет. Ты в про это не уточнял :)
#24 by DRAGO
Я пишу на языке 8.1. Вопрос повторять?
#25 by Sadovnikov
Да не обращай внимания. Это мы так, между собой пикировкой увлеклись.
#26 by Sadovnikov
А по теме - из и абсолютно непонятно чего тебе нужно и в чем именно проблема. Постарайся выдать побольше информации.
#27 by Новиков
в языке запросов 8.1. рекурсии нет и не было никогда. Товарищ Садовников вещает, что если бы ты лабал на чистом скуле - тогда сии возможности бы теоретически тебе помогли. На практике - сложно сказать.
#28 by Sadovnikov
"возможности бы теоретически тебе помогли" - э нет. Не писал я такого. Очень сомневаюсь что стоит использовать рекурсию в скуле. Особенно с ее ограничением на 32 уровня вложенности.
#29 by DRAGO
Продукция состоит из полуфабрикатов, а полуфабрикаты в свою очередь тоже из них и т.д. Нужно перебрать все в глубь и собрать затраты.
#30 by Новиков
ну что могу сказать - ты столкнулся с классическим вариантам сбора состава изделия. Как говорят обычно - читай мат.часть. P.s.: для затравки посмотри как собирается состав в УПП. P.s.2: запросом на языке запросов такую задачу решить проблематично.
#31 by Sadovnikov
Если бы в восьмерке была бы доступна нормальная работа с временными таблицами и циклами - без проблем бы это решалось. Одним запросом.
#32 by DRAGO
А куда в УПП для затравки взглянуть. Так там вроде сделали какую-то работу с временными таблицами...
#33 by DRAGO
только циклов нет, конечно
#34 by Sadovnikov
Ключевое слово - "какую-то"
#35 by DRAGO
только я не пойму для чего они сейчас
#36 by Новиков
(31 )Кто ж спорит. Еще учитывать надо термин - "цикличность", или глубину сбора состава. Ведь он может на определенной ветке зациклиться. Кароче - теория гласит так - что нужно ограничение в цикле ставить. Ну это так - к слову. в упп смотри кусок кода где собирается спецификация изделия, или его состав. Там все тупо, медленно. Но если не сталкивался особо с этим - тогда лучше с этого начать.
#37 by DRAGO
разузловка?
#38 by Новиков
у меня сейчас работающей конфы нет под рукой. Там где состав изделия собирается в виде дерева - ну погляди сам там.
#39 by AiR
Ну а кто мешает в 1С описать процедуру с запросом и эту процедуру вызывать рекурсивно?
#40 by Новиков
человек запрос хотел написать. Чувствуешь разницу? :)
#41 by DRAGO
Это крайний случай, к которому склоняет 1С.
#42 by Sadovnikov
А у тебя здесь других вариантов и не остается...
#43 by Новиков
Вообщем - есть над чем подумать :) Но то что в языке запросов 8.1. рекурсии нет - это очень хорошо :)
#44 by DRAGO
Что же хорошего? Наоборот оставили для себя поле развития.
#45 by mista2009
А что с помощью SQL запросов можно вытянуть такую инфу? Имеется примитивная тиблица, как с помощью одного запроса вытянуть иерархию? produkt  zatrata  kolichestvo А        B        43 Шоб короче были запросы prod, zatr, kol А что в результате мы должны получить? D |___E |___A Иерархию в классическом SQL мы никогда не получим, а то что в 1С иерархия какая-то есть, так это тут не подходит. Все исходные данные для построения результируещего дерева имеются в табличке выше. Объясните мне дураку что вы тут вообще обсуждаете!!!
#46 by Sadovnikov
"Иерархию в классическом SQL мы никогда не получим" - любуйся: Set NoCount On Declare @ТекстЗапроса NvarChar(4000), @Столбцы1 NvarChar(4000), @ИдРодителя Char, @Уровень Int, @i Int Declare @ДатаМинусМесяц Char, @НачТекМесяца Char, @КонДатаПлюс1 Char, @ИмяРодителя varChar Declare @Столбцы2 NvarChar, @Столбцы3 NvarChar, @Столбцы4 NvarChar,@Стр VarChar Set @ДатаМинусМесяц = '20060101' Select 0 Уровень, @ИдРодителя ТекИД, Cast(@ИмяРодителя As VarChar) Наименование, Cast(@ИдРодителя As VarChar) СуммаИД , Cast(@ИдРодителя As VarChar(2000)) ПолныйПуть, @ИдРодителя Ид0 Into #ВремТаб Create Index Индекс2 On #ВремТаб (ТекИД) While 1=1 Begin    Set @ТекстЗапроса = '        Alter Table #ВремТаб Add Ид'+Cast(@Уровень As VarChar)+' char '    End    Set @Столбцы1 = @Столбцы1 + ',ID Ид'+Cast(@Уровень As VarChar)            Inner Join #ВремТаб (NoLock) On Ид'+Cast(@Уровень-1 As VarChar)+' = ParentID    Where Уровень = @Уровень - 1 And IsFolder = 1'        exec sp_executesql @ТекстЗапроса, N'@Уровень Int', @Уровень End From ( --ОстаткиОстатки    Select SP222 Товар, SP221 Склад, SP223 Количество From RG220 (NoLock)    Select SP222 Товар, SP221 Склад    , (Case DebKred When 0 Then SP223 Else -SP223 End) Количество    From RA220 (NoLock)    Where Date_Time_IDDOC >= @НачТекМесяца And Date_Time_IDDOC < @КонДатаПлюс1 ) ОстаткиОстатки Group By  Товар, Склад Create Index Индекс2 On #Остатки (Товар) Select * Into #ОстаткиСПутями From (    Select (Уровень + 1) Уровень, ID ТекИД, (ПолныйПуть+'2'+RTrim(Descr)+ID) ПолныйПутьОстатков, Descr Наименование, СуммаИД --(Ид0+Ид1+Ид2) СуммаИД    From #ВремТаб (NoLock)    Inner Join SC38 (NoLock) On ТекИд = ParentId And IsFolder = 2 ) СПутями Inner Join #Остатки (NoLock) On ТекИД = Товар Select Уровень, ТекИД, Наименование, ЭтоГруппа, Склад, ОстатокТовара, КоличествоВРезерве, Цена From (    Select Distinct    ВТ.Уровень Уровень, ВТ.ТекИД ТекИД, ВТ.Наименование Наименование, ВТ.ПолныйПуть ПолныйПуть, 1 ЭтоГруппа    , '' Склад, 0 ОстатокТовара, 0 КоличествоВРезерве, 0 Цена    From #ВремТаб ВТ (NoLock)    Inner Join #ОстаткиСПутями ОСП On ВТ.ТекИД = Substring(ОСП.СуммаИД, ВТ.Уровень*9+1,9)            Select Уровень, ТекИД, Наименование, ПолныйПутьОстатков ПолныйПуть, 2 ЭтоГруппа, Склад, ОстатокТовара    (        Select Товар ТоварВРезерве, Sum(Количество) КоличествоВРезерве        From        ( --ОстаткиРезервы            Select SP1280 Товар, SP1281 Количество From RG1282 (NoLock)            Select SP1280 Товар            , (Case DebKred When 0 Then SP1281 Else -SP1281 End) Количество            From RA1282 (NoLock)            Where Date_Time_IDDOC >= @НачТекМесяца And Date_Time_IDDOC < @КонДатаПлюс1        ) ОстаткиРезервы        Group By  Товар    ) Резервы On ТекИд = ТоварВРезерве    Left Join    (        Select OBJID ИдТовараП, Cast(Value As Numeric(10,2)) Цена        (            Select OBJID ИдОбъекта, Max(Date) Дата            Where ID = 79 And Date < @КонДатаПлюс1            Group By OBJID        ) Даты On OBJID = ИдОбъекта And Date = Дата And ID = 79    ) Цены On ТекИд = ИдТовараП ) Выборка Order By ПолныйПуть, Склад
#47 by mista2009
Зри в корень!!! А что у тебя в результате этой всей колбасни то получилось?
#48 by Sadovnikov
Иерархия " в классическом SQL"
#49 by mista2009
Как бы тебе объяснить то... Начнём с того что мы говорим про чистые запросы без временных таблиц, курсоров, циклов, переменных и прочей лабуды. Ты сможешь с помощью запросов получить иерархию?
#50 by mista2009
Вот КОНКРЕТНЫЙ очень маленький примерчие. Хачу шоб была иерархия. Выдай мне запрос. produkt  zatrata  kolichestvo А        B        43
#51 by Новиков
Лишний раз посмотреть и убедиться - хорошо что в языке запросов 8.1. нет рекурсии :))))
#52 by Sadovnikov
А с какого перепуга я буду на себя такие ограничения накладывать? Типа "А стобо сделать то-то и то-то только с использованием методов, описанных с 30 по 122 страницу мануала?". Что за бред-то?
#53 by mista2009
Ещё один... Посмотри очень внимательно. Если бы была рекурсия по мановению волшебной палочки что бы ты получил в результате её?
#54 by rs_trade
Почитай книгу "Профессиональное руководство по Transact-SQL. Для профессионалов.2005"  Автор Кен Хендерсон. Там есть несколько примеров иерархии
#55 by mista2009
Ещё один... ЧТО БУДЕТ В КОНЕЧНОМ РЕЗУЛЬТАТЕ???? produkt  zatrata  kolichestvo А        B        43 Вам не кажется что будет точно такая же табличка????
#56 by Sadovnikov
Бесполезно давать такие советы человеку, создающему подобные ветки:
#57 by Sadovnikov
"Вам не кажется что будет точно такая же табличка????" - НЕ будет. Тебе ни разу не приходилось средствами скуля таблицы вправо разворачивать?
#58 by mista2009
Ещё раз... Вот конкретный пример produkt  zatrata  kolichestvo А        B        43 Я вижу что некто садовников очень хорошо разбирается в SQL. Выдайте мне запрос на SQL для этих данных. Зачем мне колбасня в . Такую колбасню уже тупые адынэсники в УПП используют для построения дерева спецификации. SQL намного круче 1С, соотв. можно сделать всё что угодно. Вперёд Садовников!!!
#59 by Sadovnikov
Поверь, я уже давным-давно на слабо не ведусь.
#60 by mista2009
Ау!!!! Мне ктонить создасть этот маленький запросик на SQL??? produkt  zatrata  kolichestvo А        B        43
#61 by Sadovnikov
Сколько платишь?
#62 by Новиков
деревом в виде xml файла с нужными группировками и итогами. Но не за спасибо :) На одном T-SQL :)
#63 by mista2009
Садовников и Новиков давайте без обид и т.д. Я не сомневаюсь в вашем профессионализме. Я для себя хочу понять. С помощью только одних запросов SQL вытягиваются только двумерные таблицы? Типа: produkt  zatrata  kolichestvo А        B        43
#64 by Sadovnikov
"только двумерные таблицы?" - разумеется. Вот, только они могут быть очень разными. Например, растянутыми вправо :)
#65 by mista2009
Ну хорошо. Ну нарисуй мне результирующую табличку для моих данных produkt  zatrata  kolichestvo А        B        43
#66 by mista2009
Или это тоже платно :)
#67 by Sadovnikov
Слушай, без обид - а оно мне надо?
#68 by Новиков
в графе количество должны стоять - посчитанные количества правильно. Затем это можно вылить в xml - и получишь 1С-ное ДЗ, которое останется только влить к себе.
#69 by mista2009
Чего, чего? Все количества у меня подсчитаны правильно. Мы щас не говорим об XML и 1С. Мы говорим о классическом SQL.
#71 by mista2009
Ну вот наконецто появился специалист AiR который мне щас забацает согласно статье запрос по моим данным и покажет результат запроса.
#72 by wHammer
mista2009 похоже ты всех уделал
#73 by Новиков
мда. Если все количества правильно подсчитаны - о чем тогда тут речь ведется? Ты посмотри выше - чего человеку надобно было изначально. Раскрутить вниз дерево до листа и посчитать верх количества по корням. Чтобы это сделать - надо для начала такое дерево собрать. Садовников тебе говорил про разворот в право - это когда плоская твоя табличка будет дополнятся необходимыми полями вправо. В собранно виде - его останется только вывести (куда-то). Если ты считаешь что у тебя все количества в твоем примере посчитаны правильно - значит имеет место быть говорить о каком-то ином понимании того, чего нужно :)
#74 by mista2009
Уважаемый Новиков я не соблаговолите ли вы мне нарисовать эту результирующую табличку для моих данных. Я бы был вам очень благодарен. produkt  zatrata  kolichestvo А        B        43
#75 by AiR
Я показал пример реализации, в чем у тебя проблема? Есть же Копи-паст в конце концов.
#76 by mista2009
Ну вот Садовникову и Новикову наверно лень нарисовать результирующую табличку для моих данных. Нарисуй мне пожалуйста. produkt  zatrata  kolichestvo А        B        43
#77 by vvf1973
Вам никто ничего не должен.
#78 by mista2009
Я чё пытаюсь понять то. Вот тупая 1С и тупые разработчкие УПП не могут нормально и быстро развернуть иерархию. А в SQL это всё делается влёт одним запросом и очень шустро. Ну вот ну покажите мне как это делается без вот этой вот колбасни наподобии построения спецификации в УПП.
#79 by rs_trade
Ну так иди в разработчики 1С,  и покажи им всем тупым как надо...
#80 by Новиков
ты разницу понимаешь между языком запросов 8.1. и языком "колбасни". В колбасне резалт получится для вывода. Причем тут тупость? дело в универсальности (якобы). Я думаю, если бы упп была исключительно в скуль-версии, скорее всего заточка была бы сделана на рекурсионный сбор состава. А т.к. язык-запросов не позволяет сего, посему или так - или сами собирайте.
#81 by mista2009
"заточка была бы сделана на рекурсионный сбор состава" Ну вас умоляю, ну покажите мне запрос, ну покажите мне хотябы результат запрос для моих данных, ну пожалуйста  :)))))) produkt  zatrata  kolichestvo А        B        43
#82 by rs_trade
Судя по посту для тебя чистый SQL это select * from Table1. А прочая лабуда - временные таблицы, курсоры, циклы, переменные это все приблуды сторонние...
#83 by mista2009
Я только для начала прочитаю книжечку из послушаю Садовникова с Новиковым и пойду  :)
#84 by Новиков
ты калькулятором пользоваться умеешь? Дерево уже нарисовал. Осталось количество по дереву подсчитать и нарисовать :) Итоговая табличка будет плоской - но дополненой справа или слева - кто как определит - дополнительными полями. Это первый вариант. Второй - собрать запросом дерево в xml и распарсить его в 1С (с 2005). Тоже пишется "классическим" T-SQL. Во втором варианте будет реальное дерево, которое ты будешь смотреть соотв. вьювером и видеть никакие таблички плоские - а дерево, с листикам корешками :) Предвкушаю след.вопрос - что будет в доп.полях? Или опять про табличку? :))
#85 by wHammer
Да, смешно получилось, люди неправы оказались, а сознаться им в этом что-то очень сильно мешает :)
#86 by Новиков
ну ткни пальчиком где не правы то? :)
#87 by bahmet
AD      BCAE      169 только успокойся :))
#88 by mista2009
А что вы боитесь рисовать таблички и деревья. Они же маленькие. Быстро рисуются. Посмотрите сколько я нарисовал. Так же понятнее. А то вот ты чё-то ляпнул, а конкретики никакой.
#89 by Новиков
ты топиться пойдешь - нам за тобой бежать бегом? :)
#90 by wHammer
Нет рекурсии ни в запросах 1С 8.х ни в классическом SQL, а вы пытаетесь доказать обратное, причем как-то уж совсем нелепо, вроде "А оно мне надо - я сказал я прав, значит прав, и доказывать свою правоту не буду, т.к. давно уже на слабо не ведусь" :) Вот в этом и не правы.
#91 by fisher
Камень преткновения этой ветки - различия в трактовке термина "язык запросов". В результате каждый прав по своему и флейм обеспечен :)
#92 by fisher
Ты не совсем прав. Язык запросов к СЕРВЕРУ баз данных отнюдь не ограничивается оператором SELECT. Тебе хватит беглого просмотра даже без знания предмета, чтобы понять о чем речь.
#93 by rs_trade
С рекурсии давно уже перешли на иерархию...В посте утверждается что средствами SQL нельзя получать иерархию...Все системы построенные на SQL как то обходятся без нее, либо используют извраты, то как временные таблицы, курсоры, циклы, переменные
#94 by Новиков
Про язык запросов 8.1. - я ничего против не имею и не высказывался  за то что рекурсия там есть. В T-SQL рекурсия организована может быть посредством языка собсна. Как доказать? Порятнки выкладывать сбора состава рекурсивного? Посмотрите тут уже выкладывались они. Или схему преобразования дерева в xml показать? Тоже зрелище не для слабонервных. Я не понимаю - в чем собственно не правы то?
#95 by wHammer
Ну так речь о классическом SQL, а не о возможностях той или иной СУБД.
#96 by mista2009
И T-SQL далеко не классический SQL
#97 by fisher
Это ты так решил. Другие решили по-другому :) Я же сказал, что в этой теме забыли определиться с терминами.
#98 by mista2009
А перечитай всётаки, там "Иерархию в классическом SQL мы никогда не получим..."
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С