当然我不可能穷举所有的技巧,我只是把我使用最多一些技巧分享给大家,精通sql需要大家长期实践。
六、案例分析我曾经收到来自基层医疗机构的多位小伙伴的求助,他们在写sql的时候出现“卡壳”问题。其实不管使用oracle、mssql、mysql解决问题的原理思路都是一样,只不过表现形式不同。以下分享协助小伙伴处理问题2个案例。
案例一:某小伙伴遇到数据上报问题,某个药品入库与出库数据需要在同一行展示,因为“入库与出库”来源于不同的表,小伙伴用了一种最原始的方法来处理。小伙伴的解决方案,把“入库数据”统计出来放入一个中间表,把“出库数据”统计出来放入一个中间表,再将两个中间表关联查询。
入库
出库
小伙伴感觉这样处理比较麻烦,期望能用一条sql语句解决问题。我帮小伙伴分析是否可以用一条sql搞定的可能性,第一,对于来自于不同来源数据“入库”和“出库”,相当于不同的集合,可以使用union连起来;第二,union合并有个特点,要求两个集合是相同字段类型,相同的字段的个数,缺少的字段可以使用虚拟列来解决;第三,将union结果当作子查询(相当于得到一个新的集合),再进行group by处理,可以完成整个操作。 最终sql语句部分截图如下所示: