29.01.2010 14:21
Shlong
 
Помогите с запросом, нужно получить наценку карточки и наценку группы для карточек заданного раздела классификатора. С получением наценки карточки проблем не возникло, а вот для классификатора, если она унаследована от старшего узла (т.е. имеет значение null) на выходе тоже null ;((... Вот мой запрос для 2-го узла классификатора:

Код:
Select   sk.article "Артикул",
                     sk.name "Название",
                     sc.tree "№",
                     sc.name "Классификатор",
                     se.extracharge "Наценка карточки",
                     sm.extracharge "Наценка группы"
from   SACardClass sc   LEFT OUTER JOIN SMMarkupClass sm ON sc.id = sm.idclass,
         SMCard sk         LEFT OUTER JOIN SMExtraCharge se   ON sk.article = se.article
where sk.idclass = sc.id and sc.tree like '2.%' 
order by sc.tree, se.extracharge, sk.article
29.01.2010 15:00
Mtirt
 
Код:
  select extracharge
        from (SELECT A.*
              FROM SMMARKUPCLASS A, SACARDCLASS S
             WHERE ((substr(IDClass_ID, 1, instr(IDClass_ID, '.', -1, 1) - 1) LIKE
                   S.TREE || '%') OR S.ID = 0)
               AND A.IDCLASS = S.ID
               AND A.PRICETYPE = Priecetype_id
               and a.extracharge is not null
             ORDER BY S.TREE DESC)
     where rownum = 1
29.01.2010 17:21
Shlong
 
для меня это тяжеловато... Если закинуть скрипт в том виде в каком он есть, ругается на Priecetype_id... выкидываем AND A.PRICETYPE = Priecetype_id, т.к. вид цены у меня один, начинает ругаться на IDClass_ID... Назначение 2-го подзапроса для меня ваще темный лес :teddie_04:
30.01.2010 00:57
MirProd
 
Цитата:
Shlong для меня это тяжеловато... Если закинуть скрипт в том виде в каком он есть, ругается на Priecetype_id... выкидываем AND A.PRICETYPE = Priecetype_id, т.к. вид цены у меня один, начинает ругаться на IDClass_ID... Назначение 2-го подзапроса для меня ваще темный лес :teddie_04:
Здесь IDClass_ID - это параметр, указывающий путь узла, для которого необходимо найти наценку.
То, что тебе надо, выглядит примерно так:
Код:
select cr.article "артикул",
       cr.name "название",
       ce.extracharge "наценка карточки",
       b.tree "№", 
       b.name "классификатор", 
       min(a.extracharge) keep (dense_rank first order by s.tree desc) "наценка группы"
from supermag.smmarkupclass a, 
     supermag.sacardclass s, 
     supermag.sacardclass b, 
     supermag.smcard cr,
     supermag.smextracharge ce
where ((substr(b.tree, 1, instr(b.tree, '.', -1, 1)-1) like
      s.tree || '%') or s.id = 0 or b.tree=s.tree)
      and a.idclass = s.id
      --and a.pricetype = 0 - если надо по виду цены
      and a.extracharge is not null
      and cr.idclass=b.id
      and cr.article=ce.article(+)
      --and b.tree like '2.%' - если надо по заданному узлу
group by cr.article,
       cr.name,
       ce.extracharge,
       b.tree, 
       b.name
03.02.2010 01:30
YuraZ
 
Наценка на карточку:
Код:
SELECT extra.EXTRACHARGE
FROM SUPERMAG.SMLOCPRICES pr, SUPERMAG.SMEXTRACHARGE extra
WHERE extra.ARTICLE = '<артикул>'
  AND extra.PRICETYPE = pr.PRICETYPE
  AND pr.LOCID = <код_МХ>
  AND (BITAND(pr.FLAGS, 2) = 2))
Наценка на группу:
Код:
SUPERMAG.SMARTICLEPROPERTY.GETEXTRACHARGE('<артикул>', <код_МХ>)
Дальше проверяй на IS NULL наценку на карточку. Если она не NULL, бери наценку ее, иначе - наценку на группу.
Часовой пояс GMT +3, время: 15:20.

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