前幾天客戶提出一個月報,經過了解需求及公式等過程長達20小時,總算基本模型出來了,貼出來啥曬,對於我這種菜鳥來說也算小有提高,雖然Sql語句不是很龐大,但是裡面涉及到了幾種算法,個人覺得還是經常能用到的,所以貼出來跟大家分享一下,如果大牛直接跳過!呵呵,廢話不多說,先貼幾張圖:
1 public DataSet GetRanmcgjhData(string yf) 2 { 3 DataSet ds = new DataSet(); 4 StringBuilder strSql=new StringBuilder(); 5 strSql.Append(" select rjmqkAndcgjh.daohrq_rjmqk,"); 6 strSql.Append(" round(rjmqkAndcgjh.jingz_rjmqk, 2) jingz_rjmqk,"); 7 strSql.Append(" round(sum_jingz / (case rjmqkAndcgjh.sfriq"); 8 strSql.Append(" when 0 then"); 9 strSql.Append(" 1"); 10 strSql.Append(" else"); 11 strSql.Append(" rjmqkAndcgjh.sfriq"); 12 strSql.Append(" end),"); 13 strSql.Append(" 2) yuejhfjl,"); 14 strSql.Append(" rjmqkAndcgjh.std_rjmqk,"); 15 strSql.Append(" rjmqkAndcgjh.jihl,"); 16 strSql.Append(" rjmqkAndcgjh.rjmqkAndcgjh_qy_jh_meikxxb_fk,"); 17 strSql.Append(" rjmqkAndcgjh.laiml,"); 18 strSql.Append(" rjmqkAndcgjh.jingz_rjmqk,"); 19 strSql.Append(" rjmqkAndcgjh.qnet_ar_rjmqk,"); 20 strSql.Append(" round(rjmqkAndcgjh.jihl_tzh / jh.zb,2) zanb,"); 21 strSql.Append(" jhzxqk.daohrq_jhzxqk,"); 22 strSql.Append(" 1zanb_tzh,"); 23 strSql.Append(" rjmqkAndcgjh.jihl_tzh,"); 24 strSql.Append(" rjmqkAndcgjh.qnet_ar,"); 25 strSql.Append(" rjmqkAndcgjh.std,"); 26 strSql.Append(" rjmqkAndcgjh.mt,"); 27 strSql.Append(" rjmqkAndcgjh.huiff,"); 28 strSql.Append(" rjmqkAndcgjh.yunfglj,"); 29 strSql.Append(" round(rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj, 2) yunfdj,"); 30 strSql.Append(" round(rjmqkAndcgjh.qnet_ar * rjmqkAndcgjh.meijkj, 2) meijdj,"); 31 strSql.Append(" round_new(rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj +"); 32 strSql.Append(" rjmqkAndcgjh.qnet_ar * rjmqkAndcgjh.meijkj,"); 33 strSql.Append(" 2) zonghymj,"); 34 strSql.Append(" round_new(rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj +"); 35 strSql.Append(" rjmqkAndcgjh.qnet_ar * rjmqkAndcgjh.meijkj /"); 36 strSql.Append(" (rjmqkAndcgjh.qnet_ar / 7000),"); 37 strSql.Append(" 2) zonghbmj,"); 38 strSql.Append(" rjmqkAndcgjh.meijkj,"); 39 strSql.Append(" jhzxqk.jingz_jhzxqk,"); 40 strSql.Append(" jhzxqk.qnet_ar_jhzxqk,"); 41 strSql.Append(" jhzxqk.std_jhzxqk,"); 42 strSql.Append(" jhzxqk.mt_jhzxqk,"); 43 strSql.Append(" jhzxqk.mkmingc,"); 44 strSql.Append(" jhzxqk.vdaf_jhzxqk,"); 45 strSql.Append(" (case"); 46 strSql.Append(" when (jhzxqk.qnet_ar_jhzxqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 47 strSql.Append(" jhzxqk.qnet_ar_jhzxqk * rjmqkAndcgjh.meijkj"); 48 strSql.Append(" else"); 49 strSql.Append(" jhzxqk.qnet_ar_jhzxqk *"); 50 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 51 strSql.Append(" power(2,"); 52 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - jhzxqk.qnet_ar_jhzxqk) / 100)) / 1000)"); 53 strSql.Append(" end) meij_jhzxqk,"); 54 strSql.Append(" round((case"); 55 strSql.Append(" when (rjmqkAndcgjh.qnet_ar_rjmqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 56 strSql.Append(" rjmqkAndcgjh.qnet_ar_rjmqk * rjmqkAndcgjh.meijkj"); 57 strSql.Append(" else"); 58 strSql.Append(" rjmqkAndcgjh.qnet_ar_rjmqk *"); 59 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 60 strSql.Append(" power(2,"); 61 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - rjmqkAndcgjh.qnet_ar_rjmqk) / 100)) / 1000)"); 62 strSql.Append(" end),"); 63 strSql.Append(" 2) meij_rjmqk,"); 64 strSql.Append(" round_new(((case"); 65 strSql.Append(" when (rjmqkAndcgjh.qnet_ar_rjmqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 66 strSql.Append(" rjmqkAndcgjh.qnet_ar_rjmqk * rjmqkAndcgjh.meijkj"); 67 strSql.Append(" else"); 68 strSql.Append(" rjmqkAndcgjh.qnet_ar_rjmqk *"); 69 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 70 strSql.Append(" power(2,"); 71 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - rjmqkAndcgjh.qnet_ar_rjmqk) / 100)) / 1000)"); 72 strSql.Append(" end) * 7000) / rjmqkAndcgjh.qnet_ar_rjmqk,"); 73 strSql.Append(" 2) bmdj_rjmqk,"); 74 strSql.Append(" round(rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj, 2) yunf_jhzxqk,"); 75 strSql.Append(" round((case"); 76 strSql.Append(" when (jhzxqk.qnet_ar_jhzxqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 77 strSql.Append(" jhzxqk.qnet_ar_jhzxqk * rjmqkAndcgjh.meijkj"); 78 strSql.Append(" else"); 79 strSql.Append(" jhzxqk.qnet_ar_jhzxqk *"); 80 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 81 strSql.Append(" power(2,"); 82 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - jhzxqk.qnet_ar_jhzxqk) / 100)) / 1000)"); 83 strSql.Append(" end) + rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj,"); 84 strSql.Append(" 2) zhymj_jhzxqk,"); 85 strSql.Append(" round_new(((case"); 86 strSql.Append(" when (jhzxqk.qnet_ar_jhzxqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 87 strSql.Append(" jhzxqk.qnet_ar_jhzxqk * rjmqkAndcgjh.meijkj"); 88 strSql.Append(" else"); 89 strSql.Append(" jhzxqk.qnet_ar_jhzxqk *"); 90 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 91 strSql.Append(" power(2,"); 92 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - jhzxqk.qnet_ar_jhzxqk) / 100)) / 1000)"); 93 strSql.Append(" end) + rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj) /"); 94 strSql.Append(" (jhzxqk.qnet_ar_jhzxqk / 7000),"); 95 strSql.Append(" 2) zhbmj_jhzxqk,"); 96 strSql.Append(" round(jhzxqk.jingz_jhzxqk - rjmqkAndcgjh.jihl * 10000, 2) jingz_zxcyfx,"); 97 strSql.Append(" round_new(jhzxqk.qnet_ar_jhzxqk - rjmqkAndcgjh.qnet_ar, 2) qnet_ar_zxcyfx,"); 98 strSql.Append(" round_new(jhzxqk.std_jhzxqk - rjmqkAndcgjh.std, 2) std_zxcyfx,"); 99 strSql.Append(" round_new(jhzxqk.vdaf_jhzxqk - rjmqkAndcgjh.huiff, 2) vdaf_zxcyfx,"); 100 strSql.Append(" round_new(jhzxqk.mt_jhzxqk - rjmqkAndcgjh.mt, 2) mt_zxcyfx,"); 101 strSql.Append(" round_new(rjmqkAndcgjh.jihl_tzh * 10000 / 21, 2) yjhfj,"); 102 strSql.Append(" round_new((case"); 103 strSql.Append(" when (jhzxqk.qnet_ar_jhzxqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 104 strSql.Append(" jhzxqk.qnet_ar_jhzxqk * rjmqkAndcgjh.meijkj"); 105 strSql.Append(" else"); 106 strSql.Append(" jhzxqk.qnet_ar_jhzxqk *"); 107 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 108 strSql.Append(" power(2,"); 109 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - jhzxqk.qnet_ar_jhzxqk) / 100)) / 1000)"); 110 strSql.Append(" end) + rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj -"); 111 strSql.Append(" (rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj +"); 112 strSql.Append(" rjmqkAndcgjh.qnet_ar * rjmqkAndcgjh.meijkj),"); 113 strSql.Append(" 2) zhymj_zxcyfx,"); 114 strSql.Append(" round_new(((case"); 115 strSql.Append(" when (jhzxqk.qnet_ar_jhzxqk - rjmqkAndcgjh.qnet_ar) >= 0 then"); 116 strSql.Append(" jhzxqk.qnet_ar_jhzxqk * rjmqkAndcgjh.meijkj"); 117 strSql.Append(" else"); 118 strSql.Append(" jhzxqk.qnet_ar_jhzxqk *"); 119 strSql.Append(" (rjmqkAndcgjh.meijkj -"); 120 strSql.Append(" power(2,"); 121 strSql.Append(" FLOOR((rjmqkAndcgjh.qnet_ar - jhzxqk.qnet_ar_jhzxqk) / 100)) / 1000)"); 122 strSql.Append(" end) + rjmqkAndcgjh.yunj * rjmqkAndcgjh.yunfglj) /"); 123 strSql.Append(" (jhzxqk.qnet_ar_jhzxqk / 7000) -"); 124 strSql.Append(" rjmqkAndcgjh.qnet_ar * rjmqkAndcgjh.meijkj /"); 125 strSql.Append(" (rjmqkAndcgjh.qnet_ar / 7000),"); 126 strSql.Append(" 2) zhbmj_zxcyfx"); 127 strSql.Append(" from (select sum(fh.jingz) jingz_jhzxqk,"); 128 strSql.Append(" round_new(sum(zl.qnet_ar * fh.jingz) / sum(fh.jingz) /"); 129 strSql.Append(" 0.0041868,"); 130 strSql.Append(" 2) qnet_ar_jhzxqk,"); 131 strSql.Append(" round_new(sum(zl.std * fh.jingz) / sum(fh.jingz), 2) std_jhzxqk,"); 132 strSql.Append(" round_new(sum(zl.vdaf * fh.jingz) / sum(fh.jingz), 2) vdaf_jhzxqk,"); 133 strSql.Append(" round_new(sum(zl.mt * fh.jingz) / sum(fh.jingz), 2) mt_jhzxqk,"); 134 strSql.Append(" mk.mingc mkmingc,"); 135 strSql.Append(" fh.qy_jh_meikxxb_fk,"); 136 strSql.Append(" to_char(fh.daohrq, 'yyyy-MM') daohrq_jhzxqk"); 137 strSql.Append(" from qy_fahb fh"); 138 strSql.Append(" left join qy_zhilb zl"); 139 strSql.Append(" on zl.qy_zhilboid = fh.qy_zhilb_fk"); 140 strSql.Append(" left join qy_jh_meikxxb mk"); 141 strSql.Append(" on mk.qy_jh_meikxxboid = fh.qy_jh_meikxxb_fk"); 142 strSql.Append(" where fh.jingz <> 0"); 143 strSql.Append(" and zl.qy_zhilboid is not null"); 144 strSql.Append(" group by mk.mingc,"); 145 strSql.Append(" to_char(fh.daohrq, 'yyyy-MM'),"); 146 strSql.Append(" fh.qy_jh_meikxxb_fk) jhzxqk"); 147 strSql.Append(" left join (select rjmqk.jingz_rjmqk,"); 148 strSql.Append(" rjmqk.qnet_ar_rjmqk,"); 149 strSql.Append(" rjmqk.std_rjmqk,"); 150 strSql.Append(" rjmqk.vdaf_rjmqk,"); 151 strSql.Append(" rjmqk.qy_jh_meikxxb_fk rjmqkAndcgjh_qy_jh_meikxxb_fk,"); 152 strSql.Append(" rjmqk.daohrq_rjmqk,"); 153 strSql.Append(" cgjh.jihl,"); 154 strSql.Append(" cgjh.jihl_tzh,"); 155 strSql.Append(" cgjh.qnet_ar,"); 156 strSql.Append(" cgjh.std,"); 157 strSql.Append(" cgjh.mt,"); 158 strSql.Append(" cgjh.huiff,"); 159 strSql.Append(" cgjh.yunj,"); 160 strSql.Append(" cgjh.yunfglj,"); 161 strSql.Append(" jhlrl.laiml,"); 162 strSql.Append(" cgjh.meijkj,"); 163 strSql.Append(" (select last_day(to_date(rjmqk.daohrq_rjmqk, 'yyyy-MM-dd')) -"); 164 strSql.Append(" last_day(add_months(to_date(rjmqk.daohrq_rjmqk,"); 165 strSql.Append(" 'yyyy-MM-dd'),"); 166 strSql.Append(" -1)) -"); 167 strSql.Append(" to_char(to_date(rjmqk.daohrq_rjmqk, 'yyyy-MM-dd'),"); 168 strSql.Append(" 'dd') + 1"); 169 strSql.Append(" from dual) sfriq,"); 170 strSql.Append(" (cgjh.jihl_tzh * 10000 -"); 171 strSql.Append(" (sum(rjmqk.jingz_rjmqk)"); 172 strSql.Append(" over(PARTITION BY rjmqk.qy_jh_meikxxb_fk order by"); 173 strSql.Append(" rjmqk.daohrq_rjmqk) - rjmqk.jingz_rjmqk)) sum_jingz"); 174 strSql.Append(" from (select sum(fh.jingz) jingz_rjmqk,"); 175 strSql.Append(" round_new((sum((round_new(zl.qnet_ar / 0.0041868,"); 176 strSql.Append(" 2)) * fh.jingz) /"); 177 strSql.Append(" sum(fh.jingz)),"); 178 strSql.Append(" 2) qnet_ar_rjmqk,"); 179 strSql.Append(" round_new(sum(zl.std * fh.jingz) / sum(fh.jingz),"); 180 strSql.Append(" 2) std_rjmqk,"); 181 strSql.Append(" round_new(sum(zl.vdaf * fh.jingz) / sum(fh.jingz),"); 182 strSql.Append(" 2) vdaf_rjmqk,"); 183 strSql.Append(" mk.mingc mkmingc,"); 184 strSql.Append(" fh.qy_jh_meikxxb_fk,"); 185 strSql.Append(" to_char(fh.daohrq, 'yyyy-MM-dd') daohrq_rjmqk"); 186 strSql.Append(" from qy_fahb fh"); 187 strSql.Append(" left join qy_zhilb zl"); 188 strSql.Append(" on zl.qy_zhilboid = fh.qy_zhilb_fk"); 189 strSql.Append(" left join qy_jh_meikxxb mk"); 190 strSql.Append(" on mk.qy_jh_meikxxboid = fh.qy_jh_meikxxb_fk"); 191 strSql.Append(" where fh.jingz <> 0"); 192 strSql.Append(" and zl.qy_zhilboid is not null"); 193 strSql.Append(" group by mk.mingc,"); 194 strSql.Append(" to_char(fh.daohrq, 'yyyy-MM-dd'),"); 195 strSql.Append(" fh.qy_jh_meikxxb_fk) rjmqk"); 196 strSql.Append(" left join qy_yuecgjhb cgjh"); 197 strSql.Append(" on cgjh.qy_jh_meikxxb_fk = rjmqk.qy_jh_meikxxb_fk"); 198 strSql.Append(" and to_char(to_date(rjmqk.daohrq_rjmqk, 'yyyy-MM-dd'),"); 199 strSql.Append(" 'yyyy-MM') = to_char(cgjh.yuef, 'yyyy-MM')"); 200 strSql.Append(" left join qy_jihllrb jhlrl"); 201 strSql.Append(" on jhlrl.qy_jh_meikxxb_fk = rjmqk.qy_jh_meikxxb_fk"); 202 strSql.Append(" and to_char(jhlrl.laimrq, 'yyyy-MM-dd') = rjmqk.daohrq_rjmqk"); 203 strSql.Append(" where to_char(jhlrl.laimrq, 'yyyy-MM') = '" + yf + "') rjmqkAndcgjh"); 204 strSql.Append(" on rjmqkAndcgjh.rjmqkAndcgjh_qy_jh_meikxxb_fk = jhzxqk.qy_jh_meikxxb_fk"); 205 strSql.Append(" and to_char(to_date(rjmqkAndcgjh.daohrq_rjmqk, 'yyyy-MM-dd'), 'yyyy-MM') ="); 206 strSql.Append(" jhzxqk.daohrq_jhzxqk"); 207 strSql.Append(" left join (select sum(ycgjh.jihl_tzh) zb,"); 208 strSql.Append(" to_char(ycgjh.yuef, 'yyyy-MM') yuef"); 209 strSql.Append(" from qy_yuecgjhb ycgjh"); 210 strSql.Append(" group by to_char(ycgjh.yuef, 'yyyy-MM')) jh"); 211 strSql.Append(" on jh.yuef = jhzxqk.daohrq_jhzxqk"); 212 strSql.Append(" where to_char(to_date(jhzxqk.daohrq_jhzxqk, 'yyyy-MM'), 'yyyy-MM') ="); 213 strSql.Append(" '"+yf+"'"); 214 ds = DbHelperOra.Query(strSql.ToString()); 215 return ds; 216 }
一、實現分組累計數據
先看一下實現的效果:
如上圖所示,2014/12/2 日取1日的jingz,3日取1號+2號的累計,一次類推,我相信應該很多人都遇到這樣的需求,下面我把我的實現語句分享一下:
1 select fh.daohrq, 2 fh.jingz, 3 (sum(fh.jingz) 4 over(PARTITION BY fh.qy_jh_meikxxb_fk order by fh.daohrq)) - 5 fh.jingz sumjingz 6 from qy_fahb fh 7 where to_char(fh.daohrq, 'yyyy-MM') = '2014-12' 8 and fh.qy_jh_meikxxb_fk = 'dc757915-9aa9-4cec-bde2-438cb1c4ca21'
二、當月天數和當天相差天數
1 select to_char(sysdate, 'yyyy-MM-dd') d, 2 last_day(sysdate) - last_day(add_months(sysdate, -1)) - 3 to_char(sysdate, 'dd') dd 4 from dual
效果:
三、求冪: 1 select power(2,3) from dual