首先对当月数据进行统计,Group By 对不统计字段分组,然后Sum统计数值
SELECT
`TJYF`, `GDDWBM`,`YHBH`,
SUM(`BYYDL`) BYYDL, --------统计数据
SUM(`BYDF`) BYDF --------
FROM
`tm_yx_khtz_ydtjfx`
WHERE `YHBH` =
(SELECT
YHBH
FROM
`tm_yx_khtz_jbxx`
WHERE YHMC = '李四')
AND (
TJYF = '201002'
OR `TJYF` = DATE_FORMAT(
DATE_SUB(CONCAT('201002', '01'), INTERVAL 1 YEAR), --------这里是往前一年
'%Y%m'
)
OR `TJYF` = DATE_FORMAT(
DATE_SUB(CONCAT('201002', '01'), INTERVAL 1 MONTH), --------这里是往前一个月
'%Y%m'
)
)
GROUP BY
`TJYF`,
`GDDWBM`,
`YHBH` --------对不统计字段进行分组操作
然后把上面字段作为子查询,进行 列转行 操作,贴出两个核心SQL,把行相当于做循环,用判断把列数据转为行
SUM(
CASE
R.TJYF
WHEN 201002 -----------------这里判断时间是否是本月
THEN R.BYYDL -----------------符合条件,放置数据
ELSE NULL -----------------不然置空
END
) CURRENT_BYYDL,
SUM(
CASE
R.TJYF
WHEN DATE_FORMAT(
DATE_SUB(
STR_TO_DATE('20100201', '%Y%m%d'),
INTERVAL 1 YEAR -----------------这里判断时间是否是减去一年的
),
'%Y%m'
)
THEN R.BYDF -----------------符合条件,放置数据
ELSE NULL -----------------不然置空
END
)
最后就把数据进行计算即可,然后丢给前台做处理
((S.CURRENT_BYYDL - S.RING_BYYDL) / S.RING_BYYDL) * 100 RING_BYYDL_RATE,
((S.CURRENT_BYYDL - S.SAME_BYYDL) / S.SAME_BYYDL) * 100 SAME_BYYDL_RATE,
同比 ,(今年值 - 去年值) / 去年值 * 100%
环比 ,(今年之 - 上月值) / 上月值 * 100%