2016-09-26 2 views
0

病院に支払われた請求書の回収レポートを取得したいと思います。患者が支払った前払い金額が記録されたテーブルがあります。全ての患者が前払いするわけではない。ケースを使用しているときにLEFT JOINに一致する行が見つからない場合、列は無視されます

これは、患者が事前に支払わなかった場合、行がadvanceテーブルに挿入されていない今

"SELECT SUM(
    CASE 
    WHEN bill_type = 3 THEN b.payable_amount + w.balance 
    ELSE 0 
END) AS 'amount' 

FROM bills b 
    LEFT JOIN ip_patients ip on ip.id = b.ip_id 
    LEFT JOIN advance w on w.id = (SELECT x.id FROM advance x WHERE x.ip_id = ip.id ORDER BY x.created_at DESC LIMIT 1) 
    WHERE b.doctor_id = '$d->id' AND CAST(b.created_at AS DATE) >= '$date1' AND CAST(b.created_at AS DATE) <= '$date2' AND b.is_cancelled = 0 AND b.is_deleted = 0" 

私が使用するクエリです。上記のクエリでは、事前に患者の行がない場合、彼の支払いは完全に無視されます(すなわち、billsの値が合計に加算されません)。

答えて

2

nullを追加すると例えば、結果がnull

MariaDB [sandbox]> set @a = null; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [sandbox]> set @b = 100; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> select @[email protected] amt; 
+------+ 
| amt | 
+------+ 
| NULL | 
+------+ 
1 row in set (0.00 sec) 

をヌルそして、あなたはこの

set @a = null; 
set @b = 100; 

select ifnull(@a,0) + ifnull(@b,0) amt; 

+-----+ 
| amt | 
+-----+ 
| 100 | 
+-----+ 
1 row in set (0.00 sec) 
+0

でP.salmon @おかげで対処するIFNULLを使用することができます。働いたことはありません。 – Aneeez

関連する問題