我有一个公用事业账单表如下:如何在我的情况下在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 –