SELEKSI TABEL PENERIMAAN DAN PENGELUARAN DALAM SATU TABEL

Forum diskusi membahas semua mengenai MySQL Server

Moderator: trail

SELEKSI TABEL PENERIMAAN DAN PENGELUARAN DALAM SATU TABEL

Postby akua » 17 Feb 2012, 13:31

om gw punya tabel penerimaan dan pengeluaran barang yang pengen gw tampilin total keseluruhannya per item supaya bisa di bandingkan dengan perintah seleksi berikut
Code: Select all
SELECT itemreceiptdetail.itemid,
       item.itemname,
       SUM(itemreceiptdetail .quantity)                 AS total_receipt,
       itemreceiptdetail.unit,
       Coalesce(SUM(itemconsumptiondetail.quantity), 0) AS total_consumed,
       Ifnull(itemconsumptiondetail.unit, ''),
       SUM(itemreceiptdetail .quantity) -
       Coalesce(SUM(itemconsumptiondetail.quantity), 0) AS stock
FROM   item,
       itemconsumptiondetail
       RIGHT JOIN itemreceiptdetail
         ON ( itemreceiptdetail.itemid = itemconsumptiondetail.itemid )
WHERE  itemreceiptdetail.itemid = item.itemid
GROUP  BY itemreceiptdetail.itemid; 

HASIL
Image
Code: Select all
+--------------+----------+---------------+------+----------------+---------------------------------------+-------+
| itemID       | itemName | Total_Receipt | unit | Total_Consumed | IFNULL(ItemConsumptionDetail.unit,'') | Stock |
+--------------+----------+---------------+------+----------------+---------------------------------------+-------+
| 01010-50616  | BOLT     |            16 | Pcs  |              4 | Pcs                                   |    12 |
| 01010-50816  | BOLT     |             5 | Pcs  |              4 | Pcs                                   |     1 |
| 01010-50820  | BOLT     |            10 | Pcs  |             10 | Pcs                                   |     0 |
| 01010-50835  | BOLT     |             5 | Pcs  |              0 |                                       |     5 |
| 01010-51016  | BOLT     |            10 | Pcs  |              0 |                                       |    10 |
| 01601-20410  | WASHER   |             5 | Pcs  |              1 | Pcs                                   |     4 |
| 09244-02508  | PIN      |            30 | Pcs  |              5 | Pcs                                   |    25 |
| 150-70-21346 | BIT,R.H. |             4 | Pcs  |              2 | Pcs                                   |     2 |
| 150-70-21356 | BIT,L.H. |             4 | Pcs  |              0 |                                       |     4 |
| 175-78-31230 | POINT    |            40 | Pcs  |              0 |                                       |    40 |
+--------------+----------+---------------+------+----------------+---------------------------------------+-------+

Tampilan keluaran sesuai yang gw harapkan, tapi seperti yang gw tandai merah, nilainya 16 (itemID=01010-50616), padahal aslinya cuma 8 pada gambar dibawah.

Image
Code: Select all

SELECT * FROM ItemReceiptDetail WHERE itemID='01010-50616';

+---------------------+---------------+-------------+----------+------+--------+
| itemReceiptDetailID | itemReceiptID | itemID      | quantity | unit | remark |
+---------------------+---------------+-------------+----------+------+--------+
|                  25 |          1002 | 01010-50616 |        8 | Pcs  |        |
+---------------------+---------------+-------------+----------+------+--------+


Apa yang salah ya om pada perintah select gw ya? kalau ada ide lain boleh lah di share :). Thanks
akua
Prajurit Dua
Prajurit Dua
 
Posts: 2
Joined: 17 Feb 2012, 12:58
Memberi kopi: 0 cangkir
Mendapat kopi: 0 cangkir

Re: SELEKSI TABEL PENERIMAAN DAN PENGELUARAN DALAM SATU TABE

Postby vberror13 » 18 Feb 2012, 00:25

Mungkin bagian yang ini, oom:
Code: Select all
FROM   item,
       itemconsumptiondetail
       RIGHT JOIN itemreceiptdetail
         ON ( itemreceiptdetail.itemid = itemconsumptiondetail.itemid )



Tanpa adanya klausa JOIN secara eksplisit , hubungan antara table Item dan tabel itemconsumptiondetail dianggap cross join , dan karena itu penjumlahan bisa jadi salah.
Coba yang kayak gini, oom:
Code: Select all
FROM   item INNER JOIN  itemconsumptiondetail
         ON item.itemid =  itemconsumptiondetail.itemid
       RIGHT JOIN itemreceiptdetail
         ON ( itemreceiptdetail.itemid = itemconsumptiondetail.itemid )

:ymbilly: :ymbilly: :ymbilly: =:) :ymbilly:
Just Because You Are Unique, Doesn't Mean You Are Useful
User avatar
vberror13
Global Moderator
Global Moderator
 
Posts: 1847
Joined: 13 Mar 2010, 20:34
Location: Medan Indonesia
Memberi kopi: 296 cangkir
Mendapat kopi: 321 cangkir

Re: SELEKSI TABEL PENERIMAAN DAN PENGELUARAN DALAM SATU TABE

Postby akua » 19 Feb 2012, 09:38

Makasih oom vberror13, ouputnya udah ok sekarang.
kalo pake right join dalam kasus diatas berarti kolom stock(alias) item hanya muncul jika ada data dalam itemReceipt.
Sekarang, Bagaimana kalau pengen stock item tetep tampil bila ada consumption tetapi tidak ada data yang berkaitan dalam item receipt?
Yang gw pengen seperti ini
* stock = receipt-consumption
1. ada receipt dan ada consumption, kolom stock muncul
2. Sama sekali tidak ada history receipt tetapi ada consumption,artinya stock=minus, kolom stock muncul.
3. Ada receipt tidak ada consumption, kolom stock muncul.
4. selain dari kondisi diatas berarti stock = 0 , kolom stock tidak perlu ditampilkan.
akua
Prajurit Dua
Prajurit Dua
 
Posts: 2
Joined: 17 Feb 2012, 12:58
Memberi kopi: 0 cangkir
Mendapat kopi: 0 cangkir

Re: SELEKSI TABEL PENERIMAAN DAN PENGELUARAN DALAM SATU TABE

Postby vberror13 » 21 Feb 2012, 20:32

:-? Karena saya tidak tahu persis struktur table-tablenya, saya cuma bisa kasi saran untuk mencoba-coba pemakaian Right Join atau Left Join sebagai klausa penghubung table-tablenya.
Mungkin joinnya bisa jadi begini:
Code: Select all
    FROM   item LEFT JOIN  itemconsumptiondetail
             ON item.itemid =  itemconsumptiondetail.itemid
           LEFT JOIN itemreceiptdetail
             ON ( item.itemid = itemreceiptdetail.itemid )

Jadi semua di table Item akan ditampilkan, baik data yang berhubungan ada di table itemconsumptiondetail dan itemreceiptdetail atau tidak.
:ymbilly: :ymbilly: :ymbilly: =:) :ymbilly:
Just Because You Are Unique, Doesn't Mean You Are Useful
User avatar
vberror13
Global Moderator
Global Moderator
 
Posts: 1847
Joined: 13 Mar 2010, 20:34
Location: Medan Indonesia
Memberi kopi: 296 cangkir
Mendapat kopi: 321 cangkir


Return to MySQL

Who is online

Users browsing this forum: No registered users and 1 guest