搬家第42天-sql利用视图做稍微复杂的查询

今天接到一个任务,要给现场三套装置做报表功能,要求5号完成,当真认为我是职业码农吗?我技术不入流的啊,赶鸭子上架。
现场的数据首先需要生成这样一张表。表有序号、日期、时间、罐编号、重量、罐类型(重罐还是空罐),每一次重罐会按照时间间隔有n个数据,卸料完成后空罐也会有几个数据,实际使用需要查询某一天每一批次重罐重量均值,空罐重量均值,净重。思路是先创建两个视图v1和v2,然后两个视图做联合查询。
sql表名字是mytable,字段有curindex、curdate、curtime、tankno、tankweight、tanktype
首先需要判断有没有v1和v2,如果已经有了,就删掉,判断和删除视图v1的sql代码是
IF EXISTS(SELECT 1 FROM sys.views WHERE name='v1')
 DROP VIEW v1
判断和删除视图v2的sql代码是:
IF EXISTS(SELECT 1 FROM sys.views WHERE name='v2')
 DROP VIEW v2
确认没有名字叫做v1和v2的两个视图后,开始创建。
创建v1视图的sql代码是
create view v1 as select curdate as 日期,tankno as 罐编号,avg(tankweight) as 重量 from mytable where curdate='2019-12-31' and tanktype='重罐' group by curdate,tankno
创建视图v2的sql代码是
create view v2 as select curdate as 日期,tankno as 罐编号,avg(tankweight) as 重量 from mytable where curdate='2019-12-31' and tanktype='空罐' group by curdate,tankno
联合查询的sql代码是
select v1.日期,v1.罐编号,round(AVG(v1.重量),2) as 重罐重量,round(avg(v2.重量),2) as 空罐重量,round(AVG(v1.重量)-avg(v2.重量),2) as 净重  from v1,v2 where v1.日期=v2.日期 and v2.罐编号=v1.罐编号 group by v1.日期,v1.罐编号 order by v1.罐编号
最后得到了查询结果
 
这几段sql代码也不复杂,但是花费了不少时间,套用网络流行语言就是我“流下了没有技术的眼泪”,书到用时方恨少,平时还是太放松自己了,拿退休金还早,没有关系,只有自己努力啊。
posted @ 2021-03-11 10:40  来自金沙江的小鱼  阅读(222)  评论(0编辑  收藏  举报