我有一個公用事業賬單表如下:如何在我的情況下在mysql查詢中使用case語句?
table: table_bill
-----------------------------------------------------------------------------
id | bill_type | month | year | lastdate | amount | latedate1 | lateamount1 | latedate2 | lateamount2|
------------------------------------------------------------------------------
1 | Electricity | Jan | 2015 | 2015-02-01 | 500 | 2015-03-01 | 550 | 2015-04-01 | 600
------------------------------------------------------------------------------
2 | Water | Jan | 2015 | 2015-03-01 | 200 | 2015-04-01 | 250 | 2015-05-01 | 300
-------------------------------------------------------------------------------
3 | Gas | Jan | 2015 | 2015-02-01 | 800 | 0000-00-00 | NULL | 0000-00-00 | NULL
--------------------------------------------------------------------------------
表說明:
水電賬單有罰款,逾期付款,因此這些中填入數據,而另一方面,煤氣費對延遲付款沒有罰款。因此,Gas bill的數據可以是日期的或者數量爲零。
現在,當我想查看2015年3月1日的未付賬單,然後我想未付賬單如下表所示:
table: html table
--------------------------------------------------------------
Bill Type | Month | Year | Next Payment Date | Payable Amount
--------------------------------------------------------------
Electricity | Jan | 2015 | 2015-03-01 | 550
--------------------------------------------------------------
Water | Jan | 2015 | 2015-03-01 | 200
--------------------------------------------------------------
Gas | Jan | 2015 | 2015-02-01 | 800
--------------------------------------------------------------
說明:由於電費具有優良的延期付款,我觀看賬單在2015年3月1日,所以下一個付款日期將是2015年3月1日,應付金額爲550延遲費用。另一方面,水費也可以延遲支付,但由於最後一次沒有滯納金的是2015年3月1日,所以下一次支付日期是2015年3月1日,金額爲200.由於煤氣帳單沒有遲到費,所以下一個支付日爲2015年2月1日,雖然我在2015年3月1日和應付金額查看賬單是800
問題:如何使一個SELECT查詢從數據庫表中提取數據的輸出上面的未付賬單表?
我想使用CASE語句,但不爲人所熟知有關case語句。我曾嘗試使用以下查詢:
$today = gmdate('Y-m-d', time()+21600);
SELECT bill_type, month, year,
CASE bill_type WHEN Electricity AND $today<=lastdate THEN lastdate
WHEN Electricity AND $today<=lastdate1 THEN latedate1
WHEN Electricity AND $today<=lastdate2 THEN lastdate2
WHEN Electricity AND $today<=lastdate3 THEN lastdate3
WHEN Water AND $today<=lastdate1 THEN latedate1
WHEN Water AND $today<=lastdate2 THEN lastdate2
WHEN Water AND $today<=lastdate3 THEN lastdate3
ELSE lastdate END) as ldate,
CASE bill_type WHEN Electricity AND $today<=lastdate THEN amount
WHEN Electricity AND $today<=lastdate1 THEN lateamount1
WHEN Electricity AND $today<=lastdate2 THEN lateamount2
WHEN Electricity AND $today<=lastdate3 THEN lateamount3
WHEN Water AND $today<=lastdate1 THEN lateamount1
WHEN Water AND $today<=lastdate2 THEN lateamount2
WHEN Water AND $today<=lastdate3 THEN lateamount3
ELSE amount END) as amount FROM table_bill
但上面的查詢不工作,也實在是太大了,如果將有更多的bill_type像衛生,互聯網,網站託管等。對於每個bill_type,我必須做出兩個CASE語句,並且在每個CASE語句中,我必須使用WHEN ..... THEN很多次。
如何使查詢可行和簡單儘可能?
無需正常化。我已經找出了這個問題。這將是:SELECT bill_type,一個月,一年,CASE WHEN bill_type = '電力' 或bill_type = '水' AND lastdate> ='$今天THEN lastdate WHEN bill_type = '電力' 或bill_type = '水' AND lastdate1> = '今天$',那麼lastdate1 WHEN bill_type = '電力' 或bill_type = '水' AND lastdate2> ='$今天THEN lastdate2 ELSE lastdate END作爲ldate –