getChooseMonthOilT.sql 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. select
  2. round(sum(t.monthBudget),2)monthBudget,
  3. round(sum(t.monthLimit),2)monthLimit,
  4. round(sum(t.sumPrice),2)sumPrice,
  5. round(sum(t.qmonthBudget),2)qmonthBudget ,
  6. round(sum(t.asave),2)asave,
  7. round(avg(t.oneCowBudget),2)oneCowBudget,
  8. round(avg(t.oneCowLimit),2)oneCowLimit,
  9. round(avg(t.oneCowQmonthBudget),2)oneCowQmonthBudget,
  10. round(avg(t.oneCowSumPrice),2)oneCowSumPrice,
  11. round(avg(t.oneCowAsave),2)oneCowAsave,
  12. t.ftype ftype,
  13. t.realReason realReason,
  14. t.pastureId pastureId,
  15. case
  16. when pp.name is null then
  17. case when pp.center is null then '集团'
  18. else if(pp.region is null,pp.center,pp.region)
  19. end
  20. else pp.name
  21. end pastureName
  22. from
  23. (SELECT
  24. '燃动量' ftype,
  25. ROUND(qq.monthBudget,2) monthBudget, #预算
  26. ROUND(qq.monthLimit,2) monthLimit, #内控
  27. ROUND(qq.sumPrice,2) sumPrice, #迄今实际
  28. ROUND( qq.monthLimit/qq.sumDay*qq.realDay,2) qmonthBudget, #迄今内控
  29. ROUND( qq.monthLimit/qq.sumDay*qq.realDay-(qq.sumPrice),2) asave, #实际节约
  30. ROUND(1+(( qq.monthLimit/qq.sumDay*qq.realDay-(qq.sumPrice))/(qq.monthLimit/qq.sumDay*qq.realDay)),2) realReason,#实际达成率
  31. IFNULL(ROUND(qq.monthBudget/qq.cowSumBudgetMonth,2),0) oneCowBudget, #单头牛预算
  32. IFNULL(ROUND(qq.monthLimit/qq.cowSumBudgetMonth,2),0) oneCowLimit, #单头牛内控
  33. IFNULL(ROUND((qq.monthLimit/qq.sumDay*qq.realDay)/(qq.cowSumBudgetMonth/qq.sumDay*qq.realDay),2),0) oneCowQmonthBudget, #单头牛迄今内控
  34. IFNULL(ROUND(qq.sumPrice/(qq.cowSum/qq.sumDay*qq.realDay),2),0) oneCowSumPrice,#单头牛的迄今实际
  35. IFNULL(ROUND((qq.monthLimit/qq.sumDay*qq.realDay-(qq.sumPrice))/(qq.cowSum/qq.sumDay*qq.realDay),2),0) oneCowAsave,#单头牛迄今实际节约
  36. 18 pastureId
  37. FROM
  38. (SELECT IFNULL((SELECT SUM(monthBudget)monthBudget FROM `month_budget` WHERE concat(budgetMonth,'-','01') >= tem.startTime
  39. AND concat(budgetMonth,'-','01') < tem.endTime AND feeType='柴油用量'),0)monthBudget,
  40. IFNULL((SELECT SUM(monthLimit)monthLimit FROM `month_budget` WHERE concat(budgetMonth,'-','01') >= tem.startTime
  41. AND concat(budgetMonth,'-','01') < tem.endTime AND feeType='柴油用量' ),0)monthLimit,
  42. IFNULL((SELECT SUM(cowSumBudgetMonth)cowSumBudgetMonth FROM `month_budget` WHERE concat(budgetMonth,'-','01') >= tem.startTime
  43. AND concat(budgetMonth,'-','01') < tem.endTime AND feeType='柴油用量' ),0)cowSumBudgetMonth,
  44. IFNULL((SELECT sum(fs.`cowNum`) FROM feed_sum fs INNER JOIN pasture p ON p.id = fs.pastureId WHERE fs.`feedDay` >= tem.startTime and fs.`feedDay` <= tem.endTime),0) cowSum,
  45. tem.startTime,
  46. tem.endTime,
  47. #DATEDIFF(DATE_ADD(LAST_DAY(tem.endTime),INTERVAL 1 DAY),tem.startTime) sumDay,#当前总天数
  48. #DATEDIFF(tem.endTime,tem.startTime) realDay,#到当前选择的天数
  49. DATEDIFF(LAST_DAY(tem.endTime),CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))+1 sumDay,
  50. if (DATEDIFF(tem.endTime,CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))=0,DATEDIFF(LAST_DAY(tem.endTime),CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))+1,DATEDIFF(tem.endTime,CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))) realDay,
  51. tem.sumPrice
  52. FROM(SELECT
  53. ROUND(IFNULL(SUM(d.oilAmount),0),2) sumPrice,
  54. CONCAT(DATE_FORMAT(CONCAT(LEFT(?,7),'-01'),'%Y-%m'),'-01') startTime,
  55. IF(RIGHT(?,2)='00',CONCAT(DATE_FORMAT(DATE_ADD(CONCAT(LEFT(?,7),'-01'),INTERVAL 1 MONTH),'%Y-%m'),'-01'),DATE_ADD(?,INTERVAL 1 DAY)) endTime
  56. FROM
  57. `diesel` d
  58. WHERE d.selTime >= CONCAT(DATE_FORMAT(CONCAT(LEFT(?,7),'-01'),'%Y-%m'),'-01') #startTime
  59. AND d.selTime < CONCAT(DATE_FORMAT(DATE_ADD(CONCAT(LEFT(?,7),'-01'),INTERVAL 1 MONTH),'%Y-%m'),'-01') #endTime
  60. ) tem) qq
  61. UNION ALL
  62. SELECT
  63. '燃动动量' ftype,
  64. ROUND(qq.monthBudget,2) monthBudget, #预算
  65. ROUND(qq.monthLimit,2) monthLimit, #内控
  66. ROUND(qq.sumPrice,2) sumPrice, #迄今实际
  67. ROUND( qq.monthLimit/qq.sumDay*qq.realDay,2) qmonthBudget, #迄今内控
  68. ROUND( qq.monthLimit/qq.sumDay*qq.realDay-(qq.sumPrice),2) asave, #实际节约
  69. ROUND(1+(( qq.monthLimit/qq.sumDay*qq.realDay-(qq.sumPrice))/(qq.monthLimit/qq.sumDay*qq.realDay)),2) realReason,#实际达成率
  70. IFNULL(ROUND(qq.monthBudget/qq.cowSumBudgetMonth,2),0) oneCowBudget, #单头牛预算
  71. IFNULL(ROUND(qq.monthLimit/qq.cowSumBudgetMonth,2),0) oneCowLimit, #单头牛内控
  72. IFNULL(ROUND((qq.monthLimit/qq.sumDay*qq.realDay)/(qq.cowSumBudgetMonth/qq.sumDay*qq.realDay),2),0) oneCowQmonthBudget, #单头牛迄今内控
  73. IFNULL(ROUND(qq.sumPrice/(qq.cowSum/qq.sumDay*qq.realDay),2),0) oneCowSumPrice,#单头牛的迄今实际
  74. IFNULL(ROUND((qq.monthLimit/qq.sumDay*qq.realDay-(qq.sumPrice))/(qq.cowSum/qq.sumDay*qq.realDay),2),0) oneCowAsave,#单头牛迄今实际节约
  75. qq.pastureId
  76. FROM
  77. (SELECT
  78. tem.pastureId,
  79. IFNULL((SELECT SUM(monthBudget)monthBudget FROM `month_budget` WHERE
  80. concat(budgetMonth,'-','01') >= tem.startTime
  81. AND concat(budgetMonth,'-','01') < tem.endTime
  82. AND feeType='柴油用量' AND pastureId = tem.pastureId),0)monthBudget,
  83. IFNULL((SELECT SUM(monthLimit)monthLimit FROM `month_budget` WHERE concat(budgetMonth,'-','01') >= tem.startTime
  84. AND concat(budgetMonth,'-','01') < tem.endTime
  85. AND feeType='柴油用量' AND pastureId = tem.pastureId ),0)monthLimit,
  86. IFNULL((SELECT SUM(cowSumBudgetMonth)cowSumBudgetMonth FROM `month_budget` WHERE concat(budgetMonth,'-','01') >= tem.startTime
  87. AND concat(budgetMonth,'-','01') < tem.endTime AND feeType='柴油用量' AND pastureId = tem.pastureId),0)cowSumBudgetMonth,
  88. IFNULL((SELECT sum(fs.`cowNum`) FROM feed_sum fs INNER JOIN pasture p ON p.id = fs.pastureId WHERE p.id= tem.pastureId and fs.`feedDay` >= tem.startTime and fs.`feedDay` <= tem.endTime),0) cowSum,
  89. tem.startTime,
  90. tem.endTime,
  91. #DATEDIFF(DATE_ADD(LAST_DAY(tem.endTime),INTERVAL 1 DAY),tem.startTime) sumDay,#当前总天数
  92. #DATEDIFF(tem.endTime,tem.startTime) realDay,#到当前选择的天数
  93. DATEDIFF(LAST_DAY(tem.endTime),CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))+1 sumDay,
  94. if (DATEDIFF(tem.endTime,CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))=0,DATEDIFF(LAST_DAY(tem.endTime),CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))+1,DATEDIFF(tem.endTime,CONCAT(DATE_FORMAT(tem.endTime,'%Y-%m'),'-01'))) realDay,
  95. tem.sumPrice
  96. FROM(SELECT
  97. d.pastureId,
  98. ROUND(IFNULL(SUM(d.oilAmount),0),2) sumPrice,
  99. #LEFT(d.selTime,7)wmonth,
  100. CONCAT(DATE_FORMAT(CONCAT(LEFT(?,7),'-01'),'%Y-%m'),'-01') startTime,
  101. IF(RIGHT(?,2)='00',CONCAT(DATE_FORMAT(DATE_ADD(CONCAT(LEFT(?,7),'-01'),INTERVAL 1 MONTH),'%Y-%m'),'-01'),DATE_ADD(?,INTERVAL 1 DAY)) endTime
  102. FROM
  103. `diesel` d
  104. WHERE d.selTime >= CONCAT(DATE_FORMAT(CONCAT(LEFT(?,7),'-01'),'%Y-%m'),'-01') #startTime
  105. AND d.selTime < CONCAT(DATE_FORMAT(DATE_ADD(CONCAT(LEFT(?,7),'-01'),INTERVAL 1 MONTH),'%Y-%m'),'-01') #endTime
  106. AND (d.pastureId = ? OR ? in ('18',''))
  107. AND (d.deptId = ? or ? = '')
  108. GROUP BY d.pastureId ) tem) qq
  109. )t
  110. left join
  111. pasture pp on pp.id = t.pastureId
  112. where pp.id <>18
  113. group by pp.center,pp.region,pp.name with rollup