2016-03-16 28 views
6

Üç tablomuz var tblinventory, tbldisbursement, tblmissinglost. Ödemeler düşüldükten ve o gün için iade edildikten sonra toplam kitap stoğunu hesaplamak istiyorum.Kitaplıktaki kitapların stokunun hesaplanması için Mysql sorgusu

select bn.No_of_books_procured 
    - (count(mis.Unr_ret_donated_discareded)) 
    - (count(case when dis.dis_disbursed_return = 1 
        then dis.dis_disbursed_return end))as Stock 
    from tbl_inventorylibbooks bn 
right 
    join tbl_limgt_booksmissing_lost_adjust mis 
    on mis.Book_Name_missingbk = bn.Id_inventory 
    left 
    join tbllibmange_disbursement dis 
    on dis.dis_book_name_fk_id = bn.Id_inventory 
where bn.Id_inventory = 14 

Birkaç girişte doğru yanıtı alıyorum ve diğer sonuçlar, sorgunun yanlış yanıtlar verdiğini gösteriyor. Bunun için bir çözüm sağlayabilir misiniz?

tblinventory

id Name 
---------- 
1 xyz 

= 10

tbldisbursement 1 = tahsis edilen ve 0 = geri

**booknameFK disbursed/returned** 
---------------------------------------- 
Booknafk1     1 
Booknafk2     0 
Booknafk3     1 

sağladığı toplam kitapları dikkate

tblmissinglost

**id BooknameFk missng** 
---------------------------------------- 
1 Booknafk1 lost 
2 Booknafk1 lost 

---------------------------------------- 

Ayrıca bu sorguyu

select (bn.No_of_books_procured) as procured, 
    count(distinct mis.Id_missingbooks_pid) as missing, 
    count(case when bs.dis_disbursed_return!=0 then 
    bs.dis_disbursed_return end) as disbursed 
from tbl_limgt_booksmissing_lost_adjust mis 
join tbllibmange_disbursement bs on 
mis.book_name_missingbk=bs.dis_book_name_fk_id   
join tbl_inventorylibbooks bn on bs.dis_book_name_fk_id=bn.Id_inventory 
where bn.Id_inventory=14 group by bn.Id_inventory 

yinelenen girdileri

alıyorum kontrol

this is the result of above query

+1

Geçerli ve istenen çıktıları dahil edebilir misiniz? –

+1

Lütfen tablo yapılarını ve örnek verilerini eklemek için gönderinizi düzenleyin. –

+1

Ayrıca, geçerli güne göre filtrelenecek tarihleri ​​göremiyorum. Bu, bu tabloların yalnızca geçerli günlük kayıtları tuttuğu anlamına mı geliyor? –

cevap

0

Seç Sum (BookCount) Stok ( Seç Adı, tblinventory Birliği 1 BookCount dan booknameFK Adı'nı seçin, disbursedTurnurned = 1 sonra -1 else 1 tbldisbursement 0'dan BookCount olarak sonlandırın Birliği booknameFK Adı, -1 tblmissinglost gelen BookCount) T

Bu şimdi itibariyle stokta size kitapların toplam sayısı verecektir seçmek .

İlgili konular