SQL技巧之PIVOT数据透视
作为一个医疗IT工作者,在日常数据库操作中,有些时候我们遇到需要实现“行转列”的需求,特别是在财务数据的统计汇总中。例如我有一张pivot_temp表,里面记录的财务账单数据库:
SELECT patient_id AS ID,bill_item_code AS 账单码,total AS 费用金额FROM pivot_temp
得到的结果如下:
这时候我们需要把账单码的每行数据转换成列,就需要用到PIVOT数据透视函数了。
PIVOT数据透视函数基本语法:
pivot
(
<聚合函数>(<要聚合的列>)
for <包含要成为列标题的值的列>
in ([第一个透视的列], [第二个透视的列], ... [最后一个透视的列]))
)as <透视表的别名>
PIVOT数据透视案例
下面我们来对上面pivot_temp这张表现做一个简单的数据透视案例:
SELECT *FROM pivot_temp PIVOT ( MAX(total) FOR bill_item_code IN (西药, 床位费, 材料费, 诊查费, 化验费, 检查费, 治疗费) ) result;
等到的结果如下:
这样我们就把第一张图片上面账目码每行数据转换成列表了。
下面我们对这个案例进行一个简单的升级,加入计算总费用:
SELECT a.*, b.总费用FROM( SELECT * FROM pivot_temp PIVOT ( MAX(total) FOR bill_item_code IN (西药, 床位费, 材料费, 诊查费, 化验费, 检查费, 治疗费) ) result) a ,( SELECT patient_id, SUM(total) AS 总费用 FROM pivot_temp GROUP BY patient_id) bWHERE a.patient_id = b.patient_id;
等到结果如下:
注意事项
由于PIVOT是SQL Server2005新增语法,使用的时候特别主要需要把数据库兼容级别设置为90以上,不然就会报语法错误。
今天和大家分享就到这里,希望和大家一起学习SQL技巧。谢谢大家关注!
赞 (0)