Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 02:49 30.05.24 
Компютри и Интернет
   >> Бази данни
Всички теми Следваща тема *Кратък преглед

Тема едно проблемно ( за мен ) select-че...нови  
Автор st3O (непознат )
Публикувано03.10.07 16:05



Тъкмо си мислех, че съм се оправил с тези select-и и пак дърво


Та проблема ми е следния: две таблици, едната с номенклатурата, другата с наличностите, например следните:

таблица nomenklatura

nomer name
--------------------
1001 круши
1002 ябълки
1003 банани


таблица nal

nomer col sklad
-----------------------
1001 10 1
1001 2 2
1002 5 1

Естествено таблиците са примерни

направих си селект, който ми връща наличностите във складовете и всичко е ок, по памет ще го напиша:

select nomenklatura.*, nal.sklad, nal.col from nomenklatura join nal on nomenklatura.nomer = nal.nomer

нещо такова по памет, обаче как да го накарам да ми върне и бананите???,
т.е. да има в резултата и бананите, трябва ми такъв резултат:


nomer name col sklad
----------------------------------
10001 круши 10 1
10001 круши 2 2
10002 ябълки 5 1
10002 ябълки 0 2
10003 банани 0 1
10003 банани 0 2

сигурно ще си реша проблема, ако таблицата nal има следния вид:

nomer col sklad
-----------------------
1001 10 1
1001 2 2
1002 5 1
1002 0 2
1003 0 1
1003 0 2

обаче.... за 60000+ изделия х 4 склада ми се струва доста тъпо да запълвам таблицата с нули, мислех си когато количеството в някой склад стане 0
да изтрия реда.... та има ли начин да се напише select, който да ми върне желания резултат?

Дано съм успял добре да обясня какво искам



Тема Re: едно проблемно ( за мен ) select-че...нови [re: st3O]  
Автор wqw (АзСъмЖив)
Публикувано03.10.07 19:15



Надявам се това не е production система. В смисъл, няма да те съдят като не работи...

Имаш ли таблица със складовете? Значи взимаш nomenklatura и CROSS JOIN със складовете. Резултата го OUTER JOIN-ваш с наличностите.

Обаче, имай предвид, че складовите програми не работят така. Въобще няма таблица с наличностите. Пазят се само промените (транзакциите) на количествата.

cheers,
</wqw>
p.s. А SQL ли викаш? Ми дай PRIMARY KEYs на тия таблици, типове данни и други "подробности". Best guess в момента е нещо като

SELECT nom.nomer

, COALESCE(nal.col, 0) AS col
, sto.nomer AS sklad
FROM nomenklatura nom
CROSS JOIN stores sto
LEFT JOIN nal
ON nom.nomer = nal.nomer
AND sto.nomer = nal.sklad





Тема За чий му енови [re: st3O]  
Автор bira_more (бира)
Публикувано04.10.07 03:05



на попа тромпет а на теб join?
Пробвай:
сelect nomenklatura.*, nal.sklad, nal.col from nomenklatura where nomenklatura.nomer = nal.nomer

Bеer? Mоre?




Тема Re: едно проблемно ( за мен ) select-че...нови [re: st3O]  
Автор AйeзCeдaй ((бойна))
Публикувано04.10.07 09:42



Аз не разбрах за таблицата наличност, при промяна на количеството, правиш update ли? или insert
Т.е е колоната col имаш текущото количество от продукта в дадения момент, в дадения склад. Т.е. ако сега бананите са 0, следобед може да са 100. Правиш update.

Ако триеш ред. Когато бананите станат след обяд 100, дефакто insert в nal.

Сега, едно е да триеш ред в таблицата, когато количеството е 0, друго е да напишеш select...
Ето, ти един select
select nom.nomer code ,nom.descr descr, nal.col qty, nal.sklad store
from nomenklatura nom, nal
where nom.nomer=nal.nomer
and nvl(nal.col,0)<>0
order by nom.nomer, nal.sklad

Редактирано от AйeзCeдaй на 04.10.07 09:57.



Тема Re: едно проблемно ( за мен ) select-че...нови [re: wqw]  
Автор st3O (непознат )
Публикувано04.10.07 09:59



хм... защо да не работи когато има таблица с наличностите? Всеки път да смята прихода и разхода и така да получава наличноста към момента ли? Дали ще работи бързо, таблицата с разходите е над 600000 реда? Прехвърлям база данни от clipper, затова съм доста ограничен със преструктуриране на таблиците. А относно предложения селект - не работи при мен


ползвам InterBase 6.5 и май не поддържа COALESCE : "The fact that InterBase has no built in ISNULL or CASE or COALESCE functions"....
Други идеи?



Тема Re: едно проблемно ( за мен ) select-че...нови [re: AйeзCeдaй]  
Автор st3O (непознат )
Публикувано04.10.07 10:37



При промяна на количеството в някой склад мисля да правя update, ако има някаква наличност или insert ако няма, така ще е по-малка таблицата с наличностите, защото от около 65000 номенклатурни номера обичайно наличности има само в около 10000.



Тема Re: едно проблемно ( за мен ) select-че... [re: st3O]  
Автор wqw (АзСъмЖив)
Публикувано04.10.07 11:27



Не ми се обяснява защо, но повярвай, такава таблица рядко е коректна, колкото и добре да я maintain-ваш. Обикновено е single source of pain за потребителите, защото наличността често ще е различна от салдата по оборотна ведомост на склада. Съответно ще останат с впечатлението че s/w е много калпав, след като една наличност не може да сметне.

Иначе пробвай без COALESCE (направо nal.col) -- ще ти върне NULL-ове вместо нули.

cheers,
</wqw>




Тема Re: едно проблемно ( за мен ) select-че...нови [re: wqw]  
Автор st3O (непознат )
Публикувано04.10.07 15:24



ок, сега ще пробвам, а междувременно написах това:

select nomenklatura.*, nal.sklad, nal.col from nomenklatura FULL join nal on nomenklatura.nomer = nal.nomer

на пръв поглед ми връща каквото ми трябва, ОБАЧЕ :
в реалната база като пусна select с join - "минава" за няколко ms, и четения от двете таблици от порядъка на 300-500, а същия select с FULL join .... ужас, минута и нещо и съответно чете от таблиците над 5млн. и 7 млн. това пък защо ????



Тема Re: едно проблемно ( за мен ) select-че...нови [re: wqw]  
Автор st3O (непознат )
Публикувано04.10.07 15:57



А идеята да се смятат наличностите ми харесва.... наистина отпадат доста проблеми, които сега имам. Програмата, която работи в момента е на над 10 год., писана е на clipper и често се случва несъответствие между наличностите и приход/разход, но то е заради принципа на работа на софтуера - когато някой потребител започне да набира фактура количествата се "вадят" от склада и това гарантира, че някой друг няма да ги фактурира междувременно, а ако се откаже от фактурата - програмата ги "връща" в склада, само че ако напр. спре тока междувременно - няма кой да ги върне... тогава правя точно това - една програмка изчислява приход/разход за всяко изделие и оправя таблицата с наличностите.



Тема Re: едно проблемно ( за мен ) select-че...нови [re: st3O]  
Автор AйeзCeдaй ((бойна))
Публикувано04.10.07 17:36



добре де направи една междинна таблица
и когато започва да фактурира, праскаш там всичко (ид фактура, ид ред фактура, количество, артикул, скалд)
щом се фиактурира - триеш реда,
щом, се откаже - от там връщаш всичко обратно- пак триеш реда
щом спре тока - сравняваш ид въведени фактури и това в междинната таблица - триеш или връщаш обратно в наличност...




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.