13.05.2021 04:13
Подскажите пожалуйста, почему такая проблема, конечно RTFM и все дела, ну вот че делать если очень срочно надо? пойти магазинов 40 штук закрыть и ничем не заниматься и читать доку? мы же бедные новички приходим сюда чтобы решать проблемы которые не смогли решить даже с открытыми доками(не там искал не так думали). Для Вас ведь это просто, будет минутка напишите помогите пожалуйста
13.05.2021 06:14
В общем такой прикол, думал почему не попадают товары некоторые, а их просто нету в таблице SMGOODS т.к. они были просто созданы и все, но регулярно участвуют в инверках, как такое могло произойти? и как написать чтобы можно было игнорировать что QUANTO=0 ставлю еще доп условие or, но неработает

Цитата:
// данные отчета
string sSQL =
SqlFormat("select"+
" CMS.ARTICLE, CMS.name from "+
" supermag.smcard cms left join (SELECT ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=CMS.ARTICLE and OST.QUANTO=0 or OST.QUANTO=NULL) "+
" LEFT JOIN (SELECT logi.article FROM supermag.SMCARDSECURITYLOG "+
" logi where logi.ACTIONCODE = 3 "+
" and logi.EVENTTIME between ("+RepSqlText.ToSqlDate(sLastDate)+") and "+RepSqlText.ToSqlDate(sFirstDate)+
" ) n on (n.article=cms.article) "+
" LEFT JOIN (SELECT reps.article from supermag.FFMAPREP reps "+
" where reps.saletype NOT IN ('WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE')"+
" )reps on (reps.ARTICLE=CMS.ARTICLE) "+
" where CMS.ARTICLE=OST.ARTICLE "+
" and cms.ACCEPTED=1 "+
" and n.article is null"+
" and reps.article is null"+
" GROUP BY CMS.ARTICLE, cms.Name"
);
13.05.2021 06:31
Цитата:
че делать если очень срочно надо? пойти магазинов 40 штук закрыть и ничем не заниматься и читать доку?
Именно так и объяснить начальству, которое сэкономило денег на вас. Если я и админ, и отчеты писать, и швец, и жнец, - ждите.

Join у вас правильный.

А вот дальше

where CMS.ARTICLE=OST.ARTICLE

зарубает left join.

На будущее - приводите чистый SQL-код и используйте тэги.

SQL код:
select c.article, g.quantity
 from smcard c left join smgoods g on (c.article = g.article)
where c.article in ('169847', '000002');

ARTICLE    QUANTITY
000002    0,000
169847    


select c.article, ost.quanto
 from smcard c left join (SELECT ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=C.ARTICLE and OST.QUANTO=0 /*or OST.QUANTO=NULL*/)
where c.article in ('169847', '000002');

ARTICLE    QUANTO
000002    0
169847 
13.05.2021 08:01
Цитата:
DMaslov Именно так и объяснить начальству, которое сэкономило денег на вас. Если я и админ, и отчеты писать, и швец, и жнец, - ждите.

Join у вас правильный.

А вот дальше

where CMS.ARTICLE=OST.ARTICLE

зарубает left join.

На будущее - приводите чистый SQL-код и используйте тэги.

SQL код:
select c.article, g.quantity
 from smcard c left join smgoods g on (c.article = g.article)
where c.article in ('169847', '000002');

ARTICLE    QUANTITY
000002    0,000
169847    


select c.article, ost.quanto
 from smcard c left join (SELECT ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=C.ARTICLE and OST.QUANTO=0 /*or OST.QUANTO=NULL*/)
where c.article in ('169847', '000002');

ARTICLE    QUANTO
000002    0
169847 
спасибо за ответ, с запросами беда( куда его поставить надо еще разобраться) т.е. вместо lj закидываю select и убираю cms.article=ost.article?
13.05.2021 08:29
Цитата:
DMaslov Именно так и объяснить начальству, которое сэкономило денег на вас. Если я и админ, и отчеты писать, и швец, и жнец, - ждите.

Join у вас правильный.

А вот дальше

where CMS.ARTICLE=OST.ARTICLE

зарубает left join.

На будущее - приводите чистый SQL-код и используйте тэги.

SQL код:
select c.article, g.quantity
 from smcard c left join smgoods g on (c.article = g.article)
where c.article in ('169847', '000002');

ARTICLE    QUANTITY
000002    0,000
169847    


select c.article, ost.quanto
 from smcard c left join (SELECT ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=C.ARTICLE and OST.QUANTO=0 /*or OST.QUANTO=NULL*/)
where c.article in ('169847', '000002');

ARTICLE    QUANTO
000002    0
169847 

SQL код:
    string sSQL = 
    SqlFormat(select
      c.ARTICLE, c.name from  
      supermag.smcard c left join (SELECT  ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=c.ARTICLE and OST.QUANTO=0)  
      LEFT JOIN (SELECT logi.article FROM supermag.SMCARDSECURITYLOG 
      logi where logi.ACTIONCODE = 1 
      and logi.EVENTTIME between (+RepSqlText.ToSqlDate(sLastDate)+) and +RepSqlText.ToSqlDate(sFirstDate)+
      ) n on (n.article=c.article) 
      LEFT JOIN (SELECT reps.article from supermag.FFMAPREP reps  
      where reps.saletype NOT IN ('WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE')
      )reps on (reps.ARTICLE=c.ARTICLE) 
      where c.ACCEPTED=1  
      and n.article is null
      and reps.article is null
       GROUP BY c.ARTICLE, c.Name
    ); 

сделал так, но тпереь выводит практически все товары даже с этим условием where reps.saletype NOT IN ('WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE')
13.05.2021 10:39
Если вы новичок, идите от простого к сложному.

1. SMCARDS - что это? Все карточки.
2. SMGOODS - что это? Остатки. Если SMCARDS left join SMGOODS, результат будет - все карточки, независимо от остатков.
3. FFMAPREP - что это? Движения товара. Что будет п. 2 left join FFMAPREP ? Опять же, все карточки товаров.

Специально привел короткие примеры, потренируйтесь на них.
13.05.2021 10:57
Цитата:
DMaslov Если вы новичок, идите от простого к сложному.

1. SMCARDS - что это? Все карточки.
2. SMGOODS - что это? Остатки. Если SMCARDS left join SMGOODS, результат будет - все карточки, независимо от остатков.
3. FFMAPREP - что это? Движения товара. Что будет п. 2 left join FFMAPREP ? Опять же, все карточки товаров.

Специально привел короткие примеры, потренируйтесь на них.
потихой иду но столкнулся с такой проблемой

Цитата:
select
c.ARTICLE, c.name from
supermag.smcard c left join (SELECT ost.ARTICLE, sum (OST.QUANTITY) quanto from supermag.SMGOODS ost GROUP BY ost.ARTICLE ) ost on (ost.ARTICLE=c.ARTICLE and OST.QUANTO=0)
LEFT JOIN (SELECT logi.article FROM supermag.SMCARDSECURITYLOG
logi where logi.ACTIONCODE = 1
) n on (n.article=c.article)
LEFT JOIN (SELECT reps.article from supermag.FFMAPREP reps
)reps on (reps.ARTICLE=c.ARTICLE)
where c.ACCEPTED=1
and FFMAPREP.saletype NOT IN ('WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE')
> ORA-00904: "FFMAPREP"."SALETYPE": invalid identifier


вот никак не могу победить saletype? даже если

Цитата:
SELECT article from supermag.FFMAPREP

where saletype NOT IN ('WI', 'WO', 'IW', 'CS', 'CR', 'PO', 'PN', 'PE')
то возвращает пустоту
13.05.2021 11:15
таблицы FF* - это расчет товародвижения. туда по определению не могут попасть артикула, которые не встречаются в документах, которые меняют остатки
13.05.2021 11:18
Цитата:
redesupar supermag.FFMAPREP reps
Цитата:
redesupar FFMAPREP.saletype
какая-то суета и паника началась вместо попыток думать... рекомендую прогуляться на полчасика, турничок там и все такое...
13.05.2021 11:24
Цитата:
OlegON какая-то суета и паника началась вместо попыток думать... рекомендую прогуляться на полчасика, турничок там и все такое...
я попробовал множество вариаций запросов и скинул последний, почему то NOT IN просто не отрабатывает , если тупо поставить where reps.saletype='WI', то работает
Часовой пояс GMT +3, время: 09:09.

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