SQL 同比环比
作者:互联网
描述 数据来源使用frdemo的订单明细和订单表
效果图
一、下拉框选择年份参数筛选
select distinct strftime('%Y',订购日期) as year from 订单 order by year asc
二、页面隔行变色
条件属性隔行变色
三、在SQL中计算同环比,不在单元格内计算与过滤
select t.m,t.ym,t.销量,
t1.销量 同期,
(case when t1.销量 is null then ''
else (t.销量-t1.销量)/t1.销量 end) 同比,
t2.销量 上期,
(case when t2.销量 is null then ''
else (t.销量-t2.销量)/t2.销量 end) 环比
from
(
select strftime('%m',b.订购日期)+0 m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1997'
group by strftime('%Y-%m',b.订购日期)
) t -- 1997年 m月份 ym年月 销量 销售额
left join
(
select strftime('%m',b.订购日期)+0 m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1996'
group by strftime('%Y-%m',b.订购日期)
) t1 on t.m=t1.m -- 1996 年 m月份 ym年月 销量 销售额
left join
(
select (case when strftime('%m',b.订购日期)+0 <=11
then strftime('%m',b.订购日期)+1 end) m, -- 1997年 使用then判断 ym中月份小于等于11 将月份+1
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1997'
group by strftime('%Y-%m',b.订购日期)
union
select (case when strftime('%m',b.订购日期)+0 =12
then 1 end) m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '1996'
group by strftime('%Y-%m',b.订购日期)
) t2 on t.m=t2.m
四、比例为负时加粗标红
颜色+字体 没有生效
背景颜色 + 字体 生效
解决方法 条件属性分开设置
先加粗 先显示红色 先后顺序好像导致最终显示有所出入 (咱也不知道这是为啥)
需要先加粗后显红才能达到下图显示效果
如果是先显红 后加粗 最终结果显示只是加粗的情况
五、标题随年份动态显示
将三、步骤中年份替换参数名
标签:ym,订购,日期,销量,订单,同比,SQL,环比,strftime 来源: https://blog.csdn.net/nanyangnongye/article/details/122301794