[ОТВЕТИТЬ]
15.12.2010 12:22
akonev
 
нужно получить полное имя группы с путем вида
промышленные товары/инструменты/отвертки
для артикула

вопрос: у кого-нибудь есть подходящий запросик или функция чтобы получить эту штуку по smcard.idclass ?
15.12.2010 12:46
akonev
 
там я смотрел в первую очередь. не оно. там две функции про классификатор:

одна возвращает имя последней в пути группы, то есть в моем примере "отвертки" вместо "промышленные товары/инструменты/отвертки"

вторая - приводит путь к цифровому виду, чтобы по нему было удобно сортировать
16.12.2010 09:20
AirAir
 
select smcard.name,
svcardtreesplit.tree||'/'||svcardtreesplit.name1||'/'||svcardtreesplit.name2||'/'||svcardtreesplit.ITEM3 as grupa
From
supermag.svcardtreesplit,
supermag.smcard
Where
smcard.idclass = svcardtreesplit.ID

Order by
svcardtreesplit.ID,
smcard.name
Оно?
16.12.2010 09:21
Mtirt
 
Это у тебя получилось 3 группы.
А если количество групп не ограничено? И заранее неизвестно, сколько их?
16.12.2010 09:59
AirAir
 
Тогда вот так
Select
smcard.name,
svcardtreesplit.TREE,
RTRIM(svcardtreesplit.name1||'/'||svcardtreesplit.name2||'/'||svcardtreesplit.name3||'/'||svcardtreesplit.name4||'/'||svcardtreesplit.name5||'/'||svcardtreesplit.name6||'/'||svcardtreesplit.name7||'/'||svcardtreesplit.name8||'/'||svcardtreesplit.name9||'/'||svcardtreesplit.name10||'/','/')
From
supermag.svcardtreesplit,
supermag.smcard
Where
smcard.idclass = svcardtreesplit.ID
Order by
svcardtreesplit.ID,
smcard.name


Больше 10 групп вроде не может быть!
Можно конечно функцию на pl/sql написать которая будет возвращать либо строку для одного артикула, либо коллекцию и потом эту коллекцию перебирать, но в вопросе стоит именно получение запроса!
16.12.2010 10:02
vdm
 
Код:
SELECT  tree, sys_connect_by_path(name, '/') as tree_path 
from
( SELECT rownum rn,  ptree, tree, name
    FROM (SELECT id, SUBSTR (tree, 1, INSTR (tree, '.', -1, 2)) ptree, tree, name
            FROM supermag.sacardclass)
   START WITH id = :idclass
   CONNECT BY prior ptree = tree
)
WHERE rn=1
START WITH ptree is null
CONNECT BY ptree = prior tree
Только не нравится мне такое, подозреваю, что можно проще.
16.12.2010 10:02
AirAir
 
Прошу прощения - в вопросе стоит запрос или функция.
16.12.2010 10:13
AirAir
 
vdm! круто! Я раньше с такой конструкцией не сталкивался(деревья)-надо разобраться!
16.12.2010 11:02
akonev
 
Всем Спасибо!

вот это буду использовать прямо сейчас:
Цитата:
AirAir RTRIM(svcardtreesplit.name1||'/'||svcardtreesplit.name2||'/'||svcardtreesplit.name3||'/'||svcardtreesplit.name4||'/'||svcardtreesplit.name5||'/'||svcardtreesplit.name6||'/'||svcardtreesplit.name7||'/'||svcardtreesplit.name8||'/'||svcardtreesplit.name9||'/'||svcardtreesplit.name10||'/','/')
а дерева буду изучать и много думать :)
02.02.2011 12:13
kadr
 
используем штатную функцию rep_getcardclasspath
-- Встроенные функции Супермаг 2000
Опции темы


Часовой пояс GMT +3, время: 02:45.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.