[ОТВЕТИТЬ]
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, и (+).
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 у меня крыша едет.
30.01.2014 19:08
didinap
 
Спасибо вам большое. Все заработало.
31.01.2014 06:55
Mtirt
 
Цитата:
OlegON Это просто разные нотации, Outer - это ANSI, а (+) - оракловая. Мне, если честно, оракловая нравится куда больше :( На множественных соединениях в ANSI у меня крыша едет.
Мне, если честно, тоже больше нравится оракловая.
Опции темы


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

 

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