[ОТВЕТИТЬ]
Опции темы
27.01.2014 12:24  
Ferus
Добрый день.
Нужна помощь по запросу, в итоге которого получается таблица с полями

артикул, Наименование, свойство(тип размера), ед. изм, ШК, Закупочная цена, розничная цена.
Проблем с выводом одной цены нет, скрипт ниже:

Код:
select smcard.article, smcard.name, smcard.idscale, smcard.MESABBREV,SMSTOREUNITHIST.BARCODE,SMPRICES.price  from supermag.smcard
Inner join supermag.SMSTOREUNITHIST
ON smcard.article=SMSTOREUNITHIST.article
inner join supermag.SMPRICES ON smcard.article=SMPRICES.article
where SMPRICES.PRICETYPE=1 and SMPRICES.storeloc=2
 ;
А как вывести и розничную и закупочную?
Посоветуйте плиз, а то в тупик зашел
 
27.01.2014 12:41  
Ferus
Разобрался

Код:
select t2.*,SMPRICES.price from (select smcard.article, smcard.name, smcard.idscale, smcard.MESABBREV,SMSTOREUNITHIST.BARCODE,t1.price  from supermag.smcard
Inner join supermag.SMSTOREUNITHIST
ON smcard.article=SMSTOREUNITHIST.article
inner join supermag.SMPRICES t1 ON smcard.article=t1.article
where t1.PRICETYPE=1 and t1.storeloc=2) t2
inner join supermag.SMPRICES ON t2.article=SMPRICES.article
where SMPRICES.PRICETYPE=2 and SMPRICES.storeloc=2
для памятки
 
27.01.2014 15:22  
vdm
- реально нужны шк из истории, а не текущие?
- артикула не будет в списке, если у него нет любой цены - не важно?
 
28.01.2014 11:33  
Ferus
1) Каждому артикулу соответствует один ШК (но попрвлю, не ту табличку подставил :))
2) Если цен нет(даже одной), то товар никогда не поставлялся(или не было переоценки для розничной) и выгружать артикул не нужно
 
29.01.2014 19:26  
didinap
Дабы не плодить темы напишу здесь!
Надо в печатной форме приходной накладной - форма внутреннего учета (nacl_compact.rep) вывести розничную цену(сумму) принятого товара на момент прихода.
В итоге кое что получилось изменив код в запросе Q1
вот исходный код отчета
SELECT &P_GROUP_ZN as GR_TREE,
&P_SEL_ITEM as DISPLAYITEM,
decode(:P_ShortName,0,crd.NAME,crd.ShortName) AS NAMETOV,
decode(:P_BARCODE_FOR_GOOD,0,'',
supermag.Rep_GetBarCode(crd.article,decode(:P_DOC_TYPE,'IW',-4,-3),0)) as barcode,
s.article as article,
&P_SEL_PRICE,
s.QUANTITY AS QUANTITY,
m.ABBREV AS ABBREV,
m.PREC AS PREC,
&P_JuniorTree JuniorTree
FROM &P_SQL_FROM s,
SUPERMAG.SMCARD crd,
SUPERMAG.SAMEASUREMENT m
WHERE s.ARTICLE=crd.ARTICLE
AND crd.IDMEASUREMENT=m.ID
&P_SQL_WHERE
Order By &P_SORT


а вот что у меня

SELECT &P_GROUP_ZN as GR_TREE,
&P_SEL_ITEM as DISPLAYITEM,
decode(:P_ShortName,0,crd.NAME,crd.ShortName) AS NAMETOV,
decode(:P_BARCODE_FOR_GOOD,0,'',
supermag.Rep_GetBarCode(crd.article,decode(:P_DOC_TYPE,'IW',-4,-3),0)) as barcode,
s.article as article,
&P_SEL_PRICE,
s.QUANTITY AS QUANTITY,
m.ABBREV AS ABBREV,
m.PREC AS PREC,
&P_JuniorTree JuniorTree,
ST.CashPrice*QUANTITY
FROM &P_SQL_FROM s,
SUPERMAG.SMCARD crd,
SUPERMAG.SAMEASUREMENT m,
SUPERMAG.SMSpecStat ST
WHERE s.ARTICLE=crd.ARTICLE
AND crd.IDMEASUREMENT=m.ID
and ST.SpecItem=s.specitem and st.DocType=s.DocType and st.DocID=s.DocID
&P_SQL_WHERE
Order By &P_SORT


но в итоге если розничная цена не проставлена то этот товар в накладной вообще не выводится.
Помогите пожалуйста сделать так чтоб если нет розничной цены просто бы вставляло ноль. Сам бюсь уже на этом несколько дней.
 
30.01.2014 07:49  
Mtirt
Код:
SELECT &P_GROUP_ZN as GR_TREE, 
&P_SEL_ITEM as DISPLAYITEM, 
decode(:P_ShortName,0,crd.NAME,crd.ShortName) AS NAMETOV,
decode(:P_BARCODE_FOR_GOOD,0,'',
supermag.Rep_GetBarCode(crd.article,decode(:P_DOC_TYPE,'IW',-4,-3),0)) as barcode, 
s.article as article,
&P_SEL_PRICE, 
s.QUANTITY AS QUANTITY, 
m.ABBREV AS ABBREV,
m.PREC AS PREC,
&P_JuniorTree JuniorTree,
ST.CashPrice*QUANTITY
FROM &P_SQL_FROM s, 
SUPERMAG.SMCARD crd,
SUPERMAG.SAMEASUREMENT m,
SUPERMAG.SMSpecStat ST
WHERE s.ARTICLE=crd.ARTICLE
AND crd.IDMEASUREMENT=m.ID
and ST.SpecItem=s.specitem(+) and st.DocType=s.DocType(+) and st.DocID=s.DocID(+)
&P_SQL_WHERE
Order By &P_SORT
Ну или плюсики с другой стороны равенств, лень проверять...
 
30.01.2014 16:11  
didinap
А что означают эти плюсики? Никак не могу найти объяснение в инете (буду рад если дадите ссылку почитать).
Но так не работает, не возвращает не одной строки если даже розничная цена проставлена, а с плюсиками с другой стороны
Цитата:
(+)ST.SpecItem=s.specitem and (+)st.DocType=s.DocType and (+)st.DocID=s.DocID
выдает ошибку
 
30.01.2014 16:19  
Mtirt
Внешнее объединение.
Просто Oracle был оригинален в своем понимании языка SQL и вместо Outer Join писал (+).
Сейчас он понимает и Outer join, и (+).
 
"Спасибо" Mtirt от:
30.01.2014 16:25  
OlegON
Цитата:
Сообщение от didinap
А что означают эти плюсики? Никак не могу найти объяснение в инете (буду рад если дадите ссылку почитать).
это в целом называется JOIN, а плюсики обозначают, что сторону, с которой данных не хватает, надо расширить, заполнив NULL недостающее в таблице.

код выше не смотрел, но твою строку надо поправить на
Код:
ST.SpecItem(+)=s.specitem and st.DocType(+)=s.DocType and st.DocID(+)=s.DocID
 
30.01.2014 16:27  
OlegON
Цитата:
Сообщение от Mtirt
Просто Oracle был оригинален в своем понимании языка SQL и вместо Outer Join писал (+).
Сейчас он понимает и Outer join, и (+).
Это просто разные нотации, Outer - это ANSI, а (+) - оракловая. Мне, если честно, оракловая нравится куда больше :( На множественных соединениях в ANSI у меня крыша едет.
 
"Спасибо" OlegON от:
 


Опции темы



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

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