2013-03-30 4 views
0

안녕하세요, 저는 합계 쿼리에 대해 질문하고 싶습니다. 쿼리를 수행 할 때 혼란을 겪었습니다.ASK MySQL Query SUM 다른 테이블

총 전류를 계산하고 싶습니다. INCOMING 재료에 대한

SUM

select (select sum(jumlah) from warehouse where tgl_invoice >= '2013-03-17' AND 
tgl_invoice <='2013-03;18' and kode=a.kode) total,a.kode,a.nama from warehouse a 
group by a.kode; 

결과 :


 
+-------+---------+------------+ 
| total | kode | nama  | 
+-------+---------+------------+ 
|  4 | ACLG001 | AC LG 1 pk | 
| 180 | P001 | Spindle | 
| 40 | S012 | Cable  | 
+-------+---------+------------+ 

SUM 물질의 사용하기 위해 (제품)

select (select sum(jumlah) from use_material where tanggal >= '2013-03-17' AND 
tanggal <='2013-03;18' and kode_barang=a.kode) total,a.kode,a.nama from warehouse a 
group by a.kode; 

결과 :


 
+-------+---------+------------+ 
| total | kode | nama  | 
+-------+---------+------------+ 
| NULL | ACLG001 | AC LG 1 pk | 
| 20 | P001 | Spindle | 
| 10 | S012 | Cable  | 
+-------+---------+------------+ 

그리고 지금은 받는 자료 (제품) 마이너스 재료의 사용 (제품을) 합계를

select 
    (select sum(jumlah) from warehouse 
    where tgl_invoice >= '2013-03-17' AND tgl_invoice <='2013-03;18' and kode=a.kode) - 
    (select sum(jumlah) from use_material 
    where tanggal >= '2013-03-17' AND tanggal <='2013-03;18' and kode_barang=a.kode) 
    total,a.kode,a.nama from warehouse a group by a.kode; 

결과 :


 

+-------+---------+------------+ 
| total | kode | nama  | 
+-------+---------+------------+ 
| NULL | ACLG001 | AC LG 1 pk | 
| 160 | P001 | Spindle | 
| 30 | S012 | Cable  | 
+-------+---------+------------+ 

여기 계산 중 오류가 있습니다. AC LG 1 PK는 4가되어야하지만 결과는 NULL이어야합니다.

Please Answer.

답변

1

SQL COALESCE - null 값을 제거하면 도움이됩니다.

COALESCE (NULL, 0)은 0을 제공합니다. NULL을 사용하는 연산은 종종 작동하지 않습니다.

이것에 의해, 유효한 차감 구문을 제공하기 위해 널 수율 쿼리 (표시된 두 번째 쿼리)를 COALESCE에 0으로 둘러 쌀 것을 의미합니다.

건배.
use_material 여기서 tanggal>의 총량

+0

TRY – yusronnube

+0

: use_material에서 선택 COALESCE (SUM (jumlah 해당) 여기서 tanggal> = '2013년 3월 17일'AND tanggal <= '2013-03; 18'과 kode_barang = a.kode), 0) 합계, a.kode, a.nama 창고에서 by a.kode; –

+0

본질적으로 COALESCE는 매개 변수를 취하고 제공된 첫 번째 null이 아닌 값을 반환합니다. 그것은 이런 종류의 일에 _precisely_ 사용됩니다. 당신은 무언가로부터 null을 뺄 수 없습니다. 당신은 null을 얻습니다. 그래서 당신이 사용할 수있는 무언가를 얻으려면 COALESCE를 0으로 만듭니다. 그것이 도움이되기를 바랍니다. –

0

선택 IFNULL (t.total, 0, t.total) a.kode,
가입은 왼쪽 (kode_barang kode_barang을 선택 창고 a.nama, SUM (jumlah) = '2013-03-17'AND tanggal < = '2013-03-18'
그룹 by kode_barang) t.kode_barang = a.kode
by a.kode; COALESCE 문을 사용하는 방법