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)

相关推荐