今天正在爲一個快上線的項目修改bug,一個同事過來告訴我首頁還有我的報表接口沒提供(首頁當時是一個js寫死的假數據),我口頭答應說一會就好,然後就繼續改我的bug,心裏想着雖然之前很少寫報表,但是這個語句很好寫,加上echarts渲染一哈半個多小時搞定。
先看一下效果大概是這樣的:
紫色綠色藍色從左到右的條條就用 A B C代替吧
分析一下,我是打算用一個sql查詢出來,要查出來之前的12個月份,月份裏的A、B、C類型的收入量,
一行顯示出來,用的是mysql數據庫,那樣的話我就需要:
1. 日期函數,把日期分成12個月做輸出項
2.sum函數,case when集合語句,把A、B、C分別加起來
大概就是這些吧,語句是這樣的:
<!-- 備用 --> <select id="getBillStatisticsTmpTmp" parameterType="java.lang.String" resultType="java.util.Map"> SELECT sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth', sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnothIDC', sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnothCDN', sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnothyunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth1', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth1IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth1CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth1yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth2', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth2IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth2CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth2yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth3', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth3IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth3CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth3yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth4', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth4IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth4CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth4yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth5', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth5IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth5CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth5yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth6', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth6IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth6CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth6yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth7', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth7IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth7CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth7yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth8', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth8IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth8CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth8yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth9', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth9IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth9CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth9yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth10', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth10IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth10CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth10yunComputing', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id THENb.feeEND) 'mnoth11', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeEND) 'mnoth11IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeEND) 'mnoth11CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeEND) 'mnoth11yunComputing' FROM billing_bill b <where> <if test='custId!=null and custId != ""'> and b.cust_id = #{custId} </if> </where> </select>
這樣就是查詢結果是一行的。好,開始寫前端,因爲沒有細緻看前端是怎麼渲染的,發現該語句並不適合渲染前端。
前端是這樣的:
<script> ......... xAxis: [ { type: "category", axisLine: { onZero: false }, data: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"] } ], yAxis: [ { type: "value", name: "收入/千萬元", axisTick: { lineStyle: { color: "#333" }, show: false, length: 0, interval: 100 }, nameLocation: "end", position: "left", max: 12, min: 0 }, { type: "value", name: "增量", min: -300, max: 150 } ], series: [ { name: "A", type: "bar", data: [2.6, 5.9, 9, 4, 5, 9, 8, 6, 3, 2, 6, 2.3] }, { name: "B", type: "bar", data: [2.6, 5.9, 9, 4, 5, 9, 8, 6, 3, 2, 6, 2.3], xAxisIndex: 0 }, { type: "bar", name: "C", data: [2, 4.9, 7, 3, 3, 5, 7, 8, 7, 5, 6.4, 3.3] } ], ......... </script>
發現了事情並不是這麼簡單,重新分析一下, data: [2, 4.9, 7, 3, 3, 5, 7, 8, 7, 5, 6.4, 3.3]這種類型,
應該是sql查出來是列表,再做循環比較好,前臺明顯是一個foreach循環把ABC對應的data [] 渲染出來更好呀。
分析過後得出,查詢出來的是列表更加適合渲染,這就需要我去對查詢出來的數據再改結構,或者還有一個辦法,
去修改調用echarts的js,( 後端程序猿思索了一會,改echarts還是算了吧 ) 感覺還是重寫sql更快一些,重新寫後:
<!-- 提供用於首頁的統計 --> <select id="getBillStatisticsTmp" parameterType="java.lang.String" resultType="java.util.Map"> SELECT DATE_FORMAT(CURRENT_DATE(), '%m') curr, sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id THENb.fee ELSE 0 END) 'month', sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'monthIDC', sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'monthCDN', sum(CASE WHEN DATE_FORMAT(CURRENT_DATE(), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'monthYUN' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month1', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month1IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month1CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 1 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month1yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month2', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month2IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month2CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 2 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month2yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month3', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month3IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month3CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 3 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month3yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month4', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month4IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month4CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 4 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month4yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month5', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month5IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month5CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 5 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month5yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month6', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month6IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month6CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 6 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month6yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month7', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month7IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month7CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 7 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month7yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month8', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month8IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month8CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 8 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month8yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month9', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month9IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month9CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 9 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month9yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month10', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month10IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month10CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 10 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month10yunComputing' from billing_bill b UNION SELECT DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%m'), sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id THENb.feeELSE 0 END) 'month11', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000000 THENb.feeELSE 0 END) 'month11IDC', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000001 THENb.feeELSE 0 END) 'month11CDN', sum(CASE WHEN DATE_FORMAT(DATE_SUB(CURRENT_DATE(),INTERVAL 11 MONTH), '%Y%m') = b.cycle_id and b.product_id = 10000002 THENb.feeELSE 0 END) 'month11yunComputing' FROM billing_bill b </select>
這樣就對了,結果:
記錄一下寫統計報表的思路,第一就是先觀察前端哪些字段是需要後臺查出來的,再就是判斷拿到
的數據形式要適合前端渲染,大部分的條形柱狀報表就是這樣吧。